hitTestPoint没有给出正确的结果
我有一个我添加了MouseEvent.MOUSE_OUT监听器的影片剪辑。
hitTestPoint没有给出正确的结果
movieclip.addEventListener(MouseEvent.MOUSE_OUT, removeMovieClip);
现在逻辑是去除上MOUSE_OUT
影片剪辑和其重新添加到阶段上的另一按钮的MouseOver
。预期功能类似于显示一些信息的滑块
在这种情况下,MouseEvent.MOUSE_OUT
触发不能如预期那样正常工作。当我将鼠标从快速移动的移动夹快速启动时,它会触发。如果我非常缓慢地退出它不会触发,因此动画片段仍在舞台上。
可能是什么问题?
。
更新:我忘了提,我使用hitTestPoint以测试鼠标是影片剪辑之外。在大多数情况下,如果我慢慢移动鼠标,hitTestPoint
没有给出正确的结果(错误),它位于Movieclip之外,因此我无法移除该对象。
更新2:让我重新说明这个问题。我想我弄糟了这个解释。
鼠标事件正常工作。
movieclip.addEventListener(MouseEvent.MOUSE_OUT
正确着火,我在事件处理方法。现在,当我试图确定是否出现此影片剪辑时出现问题。
private function removeObj(eve:Event):void
{
var e:MouseEvent = MouseEvent(eve);
if (m_wishlistImage)
{
var InsideSlot:Boolean = eve.currentTarget.hitTestPoint(e.stageX, e.stageY);
if(!InsideSlot){
虽然缓慢移动鼠标移出对象InsideSlot
的仍然是正确的,因此代码流不走的if
条件内,因此我无法取出异物。
在跟踪e.stageX
时,我发现它经常显示的坐标不是鼠标移出时的坐标(显示槽内的一个点)。当我慢慢迁出时,这种行为最常出现。
可能是什么原因?
尝试聆听MouseEvent.ROLL_OUT
事件。
不工作.... – 2010-09-27 17:03:01
它必须工作。 :)检查问题是否在其他地方,也许你在同一个空间上有更多的图层? – vulkanino 2010-09-27 17:23:25
已更新问题 – 2010-09-27 17:37:12
如果您的MovieClip的mouseChildren属性未设置为false,则在您希望取决于MovieClip的内容之前触发MOUSE_OUT事件似乎是合理的。
那么,如果您将MouseEvent.MOUSE_OUT代码替换为Event.ENTER_FRAME事件,则可以解决此问题。您需要使用它,因为鼠标移动有时也不会在Mouse-Event监听器中捕获,这是因为swf帧速率通常太快以至于无法跟踪鼠标移动,因此请使用Event.ENTER_FRAME。
我以前遇到过这样的问题。所以添加监听器到这样的舞台
addEventListener(Event。ENTER_FRAME,removeMovieClip)
现在去除容器中的对象或MovieClip之前,把检查也很喜欢
公共职能removeMovieClip(EVT:事件):无效
{
如果(ParentClip.contains (ChildClip))ParentClip.removeChild(ChildClip)..
}
ROLL_OVER和MOUSE_OVER有一点区别。当电影剪辑或显示对象包含两个或更多个子控件时,将鼠标移动到子控件中时,每次鼠标移动时都会触发MOUSE_OVER事件。而每次在将鼠标聚焦到其他位置后指向父容器或其任何子节点时,将调用ROLL_OVER一次。在鼠标的MainContainer或任何显示对象中移动鼠标不会触发ROLL_OVER事件。 – 2010-09-29 13:27:58
检查你的鼠标位置是阶段坐标(不是您的小孩动画片段坐标)。
换句话说确保您使用stage.mouseX, stage.mouseY
,而不是隐含使用影片剪辑内的本地成员变量(这将给相对于影片剪辑鼠标的位置。)
hitTestPoint 需要点给予作为舞台坐标。
谢谢,它帮助了我 – 2012-01-21 12:52:52
尝试使用ROLL_OUT,它对我来说似乎更加健壮。 – alxx 2010-09-27 16:22:16