在Flash CS5中拖动对象时将鼠标悬停在上方

时间:2011-11-23 03:13:57

标签: flash actionscript-3 actionscript flash-cs5

我有一个使用Flash Professional CS5和ActionScript 3的项目。

我需要在特定位置拖动对象时触发事件,但尚未删除它。然后,当我离开那个地方(仍在拖动)时,我需要触发一个不同的事件。但是,这只应在我拖动对象时发生。

传统的鼠标悬停和鼠标离开事件在拖动时不起作用(仅在不拖动时)。

我该怎么做?

3 个答案:

答案 0 :(得分:2)

它不起作用的原因是因为顶部的DisplayObject(被拖动的那个,正在窃取事件本身)。

您有几个选项,第一个是将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
    }
}

第二个是为具有mouseChildrenmouseEnabled属性的拖动对象禁用鼠标事件,但这会破坏您当前的拖动,您必须将事件重新排列到拖动的对象父级或阶段。

答案 1 :(得分:1)

只需调用objectContainer.getObjectsUnderPoint(new Point(mouseX, mouseY))即可获得该点下的所有对象,并且可以循环使用它们并检查其中一个是否是“放置目标”。

请参阅:Actionscript 3: get display object at pixel

答案 2 :(得分:0)

如果您正在为AIR运行时构建,可以尝试使用nativeDragEnter事件:

  

当拖动手势进入其边界时由InteractiveObject调度。

nativeDragExit事件:

  

当拖动手势离开其边界时由InteractiveObject调度。