当前位置:  开发笔记 > 编程语言 > 正文

在Actionscript 3中拖动时检测鼠标离开阶段

如何解决《在Actionscript3中拖动时检测鼠标离开阶段》经验,为你挑选了1个好方法。

Event.MOUSE_LEAVE在Actionscript 3中非常棒,但如果用户按住左侧(或右侧)鼠标按钮,它似乎不会触发.

有没有办法检测鼠标在按住鼠标时是否离开Flash影片?或者如果它是在flash电影之外发布的?



1> greggreg..:

要获得所有这些,需要一点点破解.您必须存储鼠标是否离开舞台并相应地处理Event.MOUSE_LEAVE事件.这样做可以为您提供所有正常的鼠标功能,包括不会因为鼠标离开舞台而停止拖动.由于用户可能回到舞台并继续拖动,因此等待用户在舞台上或舞台外释放鼠标.

var mouseOffStage:Boolean;

var bonk:YourDisplayObject = new YourDisplayObject()
addChild(bonk);
bonk.addEventListener(MouseEvent.MOUSE_DOWN, function():void {
  mouseOffStage = false;

  bonk.startDrag();

  stage.addEventListener(MouseEvent.MOUSE_UP, mouseUp);
  stage.addEventListener(Event.MOUSE_LEAVE, mouseLeave);
  stage.addEventListener(MouseEvent.MOUSE_OUT, mouseOut);
  stage.addEventListener(MouseEvent.MOUSE_OVER, mouseOver);
})

private function mouseUp(e:MouseEvent) :void {
  trace("Mouse Up On Stage")
  bonk.stopDrag()
}

private function mouseLeave(e:Event) :void {
  if(mouseOffStage){
    trace("mouse up and off stage");
    bonk.stopDrag();
  }else{
    trace("mouse has left the stage");
    //no reason to stop drag here as the user hasn't released the mouse yet
  }
}

private function mouseOut(e:MouseEvent) :void {
  mouseOffStage = true;
  trace("mouse has left the stage")
}

private function mouseOver(e:MouseEvent) :void {
  mouseOffStage = false;
  trace("mouse has come back on stage");
}

黑客是当鼠标从舞台上释放时,MOUSE_LEAVE事件而不是MOUSE_UP事件被触发,因此你必须跟踪鼠标是否已经离开阶段.

拖动完成后,您当然希望删除与检测鼠标输出和鼠标悬停相关的所有事件监听器,但该代码被遗漏以便于阅读.


言语无法真正表达我已经多久了,我很高兴我偶然发现了这个答案.
推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有