我有一个使用Flash Professional CS5和ActionScript 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
}
}
第二个是为具有mouseChildren
和mouseEnabled
属性的拖动对象禁用鼠标事件,但这会破坏您当前的拖动,您必须将事件重新排列到拖动的对象父级或阶段。
答案 1 :(得分:1)
只需调用objectContainer.getObjectsUnderPoint(new Point(mouseX, mouseY))
即可获得该点下的所有对象,并且可以循环使用它们并检查其中一个是否是“放置目标”。
答案 2 :(得分:0)
如果您正在为AIR运行时构建,可以尝试使用nativeDragEnter事件:
当拖动手势进入其边界时由InteractiveObject调度。
和nativeDragExit事件:
当拖动手势离开其边界时由InteractiveObject调度。