Наведите курсор мыши при перетаскивании объекта во Flash CS5 - PullRequest
6 голосов
/ 23 ноября 2011

У меня есть проект с Flash Professional CS5 и ActionScript 3.

Мне нужно вызвать событие, когда я перетаскиваю объект на определенное место, но еще не уронил его.Затем мне нужно вызвать другое событие, когда я покидаю это место (все еще перетаскивая).Однако это должно происходить только при перетаскивании объекта.

Традиционные события мыши и отпускания мыши не работают при перетаскивании (только при отсутствии перетаскивания).

Как это сделатьэто?

Ответы [ 3 ]

2 голосов
/ 23 ноября 2011

Причина, по которой он не работает, заключается в том, что верхний объект DisplayObject (который перетаскивается, крадет события для себя).

У вас есть несколько опций, 1-й добавляет вместо этого событие MOUSE_MOVE к перетаскиваемому объекту.определенной точки, и вы можете сделать hitTestObject () , чтобы проверить, перекрываются ли они, или hitTestPoint () , если мышь находится внутри определенной точки.

Так что в основном сделайте это:

draggedObject.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);

function onMouseMove(evt : MouseEvent) : void {
    var particularSpot : MovieClip = MovieClip(evt.currentTarget.parent).getChildByName("particular spot object name");
    if(particularSpot.hitTestPoint(evt.mouseX, evt.mouseY)) // or use hitTestObject
    {
        // The mouse is on top of particular object
    }
    else
    {
        // The mouse is not on top of particular object
    }
}

Второй - отключить события мыши для перетаскиваемого объекта со свойствами mouseChildren и mouseEnabled, но это нарушит текущее перетаскивание, вам придется переставитьсобытия для родительского объекта или сцены перетаскиваемого объекта.

1 голос
/ 23 ноября 2011

Просто позвоните objectContainer.getObjectsUnderPoint(new Point(mouseX, mouseY)), и вы получите все объекты, находящиеся под этой точкой, и вы можете зациклить их и проверить, является ли один из них «целевой целью».

См .: Actionscript 3: получить экранный объект в пикселе

0 голосов
/ 23 ноября 2011

Если вы собирались для среды выполнения AIR, попробуйте использовать событие nativeDragEnter :

Отправляется объектом InteractiveObject, когда жест перетаскивания входит в его границу.*

и событие nativeDragExit :

Отправляется объектом InteractiveObject, когда жест перетаскивания покидает его границу.

...