AS3鼠标事件在鼠标X坐标为0时不触发

3

我正在用Flash Develop创建一个应该非常简单的全屏拖放游戏。它运行良好,除了一个令人沮丧的问题。

我将物品添加到舞台上,为它们添加MOUSE_DOWN侦听器,并在其中一个侦听器发现时开始拖动。然后,我添加了一个MOUSE_UP侦听器来确定何时停止拖动。同样,这很好地工作,除非鼠标指针位于屏幕左侧。当鼠标全部移到屏幕左侧时,我松开鼠标或按下鼠标没有侦听器被触发。我还将其从全屏模式中取出,如果鼠标在0以下,则不会触发鼠标事件。

到底是怎么回事?

    private function itemSelectedHandler(e:MouseEvent):void 
    {
        thisItem = GameItem(e.currentTarget);
        thisItem.startDrag();
        stage.addEventListener(MouseEvent.MOUSE_UP, itemUnselectedHandler, false, 0, true);
    }

    private function itemUnselectedHandler(e:MouseEvent):void 
    {
        stopDrag();
        stage.removeEventListener(MouseEvent.MOUSE_UP, itemUnselectedHandler);
        thisItem.removeEventListener(MouseEvent.MOUSE_DOWN, itemSelectedHandler);   
    }
1个回答

3
您正在调用类上的stopDrag而不是拖动的精灵。尝试使用以下代码:
package 
{
    public class Main extends Sprite 
    {

        private var _draggedSprite:Sprite = null;

        public function Main():void 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }

        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            // entry point

            for (var i:int = 0; i < 10; i++) 
            {
                createBox();
            }
        }

        private function createBox():void
        {
            var sp:Sprite = new Sprite();
            sp.graphics.beginFill(0xff0000, 1);
            sp.graphics.drawRect(0, 0, 30, 30);
            sp.graphics.endFill();
            sp.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);

            sp.x = Math.random() * (stage.stageWidth - 30);
            sp.y = Math.random() * (stage.stageHeight - 30);

            addChild(sp);
        }

        private function onMouseDown(e:MouseEvent):void 
        {
            var sp:Sprite = e.target as Sprite;
            sp.startDrag();
            _draggedSprite = sp;

            stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
        }

        private function onMouseUp(e:MouseEvent):void 
        {
            _draggedSprite.stopDrag();
            _draggedSprite = null;
            stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
        }

    }

}

在全屏模式下,当鼠标X坐标为0时,这对我有用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接