Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Flash CS5中拖动对象时将鼠标悬停_Flash_Actionscript 3_Actionscript_Flash Cs5 - Fatal编程技术网

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

在Flash CS5中拖动对象时将鼠标悬停,flash,actionscript-3,actionscript,flash-cs5,Flash,Actionscript 3,Actionscript,Flash Cs5,我有一个Flash Professional CS5和ActionScript 3的项目 当我将一个对象拖过一个特定的点,但还没有放下它时,我需要触发一个事件。然后,我需要在离开该点时触发另一个事件(仍在拖动)。然而,这应该只在我拖动对象时发生 传统的鼠标悬停和鼠标离开事件在拖动时不起作用(仅在不拖动时) 我该怎么做?它不起作用的原因是因为顶部的DisplayObject(被拖动的那个对象正在为自己窃取事件) 您有几个选项,第一个选项是将鼠标移动事件添加到拖动的对象,而不是特定的点,您可以执行一

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

当我将一个对象拖过一个特定的点,但还没有放下它时,我需要触发一个事件。然后,我需要在离开该点时触发另一个事件(仍在拖动)。然而,这应该只在我拖动对象时发生

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


我该怎么做?

它不起作用的原因是因为顶部的DisplayObject(被拖动的那个对象正在为自己窃取事件)

您有几个选项,第一个选项是将鼠标移动事件添加到拖动的对象,而不是特定的点,您可以执行一个步骤来验证它们是否重叠,或者一个步骤来验证鼠标是否位于特定点内

所以基本上是这样做的:

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
属性禁用拖动对象的鼠标事件,但这会中断当前的拖动,您必须将事件重新排列到拖动的对象父对象或阶段。

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

当拖动手势进入其边界时,由交互对象调度

活动:

当拖动手势离开其边界时,由交互对象调度


只需调用
objectContainer.getObjectsUnderPoint(新点(mouseX,mouseY))
即可获得该点下的所有对象,您可以通过这些对象进行循环,并检查其中一个对象是否为“drop target”


请参阅:

我没有时间回答,但事件未触发的原因是,途中有另一个对象(正在拖动的对象),因此下面的对象不会获得进入/离开事件。有多种方法可以解决这个问题,包括使用拖动对象的
mouseChildren
属性(尝试将其设置为false),或者,如果将MouseEvent.mouse\u up侦听器添加到后台,则在后台为鼠标移动事件设置临时侦听器并结合第二个选项不会中断拖动。太棒了!这是两个非常有用的函数!值得注意的是,示例代码过于复杂。接受答案,在编辑中进行工作简化。getObjectsUnderPoint本机使用hitTestPoint验证容器上的所有显示。真的吗?我不知道,编辑答案。但是,在纯C++中做它可能要快很多,而不是在As循环中调用几十个函数调用。你认为,优化是一个棘手的问题,我不会说一些模糊函数比其他一些模糊函数更快,而不需要测试它。但是,如果他只是检查鼠标下是否有一个电影剪辑,我看不出有必要找到所有的剪辑。这很好,尽管在这种情况下这不是最有效的。hitTestPoint在这里可以更好地用于此目的,但我鼓励其他程序员也记住此函数!为什么是-1?我想知道在什么情况下这是行不通的。因为,无论这个答案在我的案例中是否正确,文档都会支持它。因此,这个答案很有用。(请不要投反对票,除非“答案没用”,各位)顺便说一句,这只适用于我正在使用的Air运行时。@JasonMc92-你完全正确!我认为,因为文档中的事件旁边没有AIR符号,所以它们不仅仅是AIR。一旦我从过滤器上取下空气运行时,“噗”的一声,它们就不见了。我确实认为“本地人”是一个奇怪的术语,但我认为它已经被同化为正常的FP,但保留了这个名称。我猜这就解释了-1!但是,-1应该包括一个解释,imho。