在任何情况下,Flash应用程序都可以接收两个MouseEvent.MOUSE_DOWN,而两者之间没有MouseEvent.MOUSE_UP

在我的ActionScript 3应用程序中,我想跟踪用户拖动精灵。我的计划是监听MouseEvent.MOUSE_DOWN,启动一个无限重复的计时器来记录鼠标的位置,并停止MouseEvent.MOUSE_UP上的计时器。那是一个好计划吗?

最佳答案

  • 单击但不释放按钮。
  • 在按住按钮的同时,将光标移到外部。
  • 释放外部按钮。
  • 回到内部,然后再次单击。

  • 您将获得两次下降事件,而没有上升事件。

    拖放的更好解决方案可能是侦听MOUSE_MOVE事件,并在事件处理程序中检查buttonDown属性。如果在移动时按下按钮,则为true,否则为false。

    编辑:对于阶段,即使您释放Flash窗口外的按钮,也会触发up事件。因此对于阶段来说,这可以工作,但是对我来说,将MOUSE_MOVEbuttonDown结合使用仍然可以代替计时器。您可以使用以下代码检查自己:
    public class StageEventTest extends Sprite
    {
        public function StageEventTest()
        {
            stage.addEventListener(MouseEvent.MOUSE_DOWN, onDown);
            stage.addEventListener(MouseEvent.MOUSE_UP, onUp);
            stage.addEventListener(MouseEvent.MOUSE_MOVE, onMove);
        }
    
        private function onDown(evt:MouseEvent):void {
            trace("down");
        }
    
        private function onUp(evt:MouseEvent):void {
            trace("up");
        }
    
        private function onMove(evt:MouseEvent):void {
            trace("move", evt.buttonDown);
        }
    }
    

    关于actionscript-3 - 是否每个MOUSE_DOWN都保证有MOUSE_UP?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6697304/

    10-10 23:08