1
11
我从来没有遇到过mouseOver和mouseOut的问题。 但您可以使用hitTestPoint:
如果您确信该属性是可用的并且是从您调用的位置设置的,那么您也可以使用stage.mouseX和stage.mouse Y(而不是localToGlobal)。 我还没有测试代码,但我认为它应该可以工作。 (编辑) 但是,如果你想绝对确定鼠标经过了一个对象——即使你走得太快以至于完全跳过了它,你也必须检查两帧鼠标点之间的点。 例如:
您可以记住最后一个状态是否已结束,并在isOver!=时调度自定义事件结束了。如果你在while循环中这样做,你会得到高度准确的鼠标过度检测。 但我敢打赌,shapeFlag=true的hitTestPoint相当占用CPU,尤其是在一帧中大量使用的情况下。因此,在这种情况下,您可能希望将此MAX_DIST设置为尽可能高的值。 |
2
2
那就用数学吧。
请注意,这取决于movieclips注册点。。。在这种情况下,reg点位于movieclip的中间。
|
3
1
如果鼠标“足够快”通过,那么操作系统可能一开始就没有向Flash发送任何鼠标事件。移动鼠标的速度远远超过其分辨率(或操作系统可以处理的速度)将产生您所看到的效果(事实是,屏幕的那部分没有处理鼠标事件),否则mouse_OVER肯定会触发(如果鼠标确实在电影剪辑上生成了至少一个移动事件)。 然而MOUSE_OUT事件, 可以 由于各种操作系统或浏览器的安全限制,如果鼠标离开舞台区域(离开Flash),则不会启动。 要解决此问题,请为注册侦听器 stage::flash.events.Event.DEACTIVATE 和 stage::flash.events.Event.MOUSE_LEAVE ,在每个Sprite/MovieClip中,您也在监听MOUSE_OUT,重用相同的处理程序函数。 mouseLeave事件(由stage触发)是专门为您的问题创建的:“当指针移出stage区域时,由stage对象调度。如果按下鼠标按钮,则不会调度事件。”如果它触发,则您应该像mouse_out一样处理处于mouse_OVER“状态”的任何movieclip(假设您有这样的状态)。如果鼠标按钮在离开舞台区域时被按下,用户可能会在某个时候释放它,而DEACTIVATE将在舞台上触发。 |
4
1
您还可以监听舞台鼠标移动,并检查鼠标下的剪辑:
并检查您的电影剪辑是否在阵列内。 |
Zeinab Ghaffarnasab · 如何在形状上操作鼠标? 7 年前 |
ofey · d3 v4工具提示传递数据d问题 7 年前 |
mbugr · 如何检查鼠标悬停在所有按钮WPF上 9 年前 |
Anuj · 在使用d3.js创建的条形图上悬停后触发2个鼠标悬停事件? 10 年前 |