user2237481
user2237481

Reputation: 31

AS3 mouse events not firing when mouseX = 0

I'm creating what should be a very simple, full screen drag and drop game in Flash Develop. It works fine except in one frustrating instance.

I add items to the stage, add MOUSE_DOWN listeners to them and start dragging when one hears that listener. I then add a MOUSE_UP listener to figure out when to stop the drag. Again, this works fine unless mouseX = 0. When the mouse is all the way to the left of the screen and I mouse up or mouse down no listener is fired. I also took it out of full screen mode and if the mouse is at or below 0 no mouse events will fire.

What in the world is going on?

    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);   
    }

Upvotes: 3

Views: 437

Answers (1)

Barış Uşaklı
Barış Uşaklı

Reputation: 13522

You are calling stopDrag on the class and not the dragged sprite. Try something like the following :

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);
        }

    }

}

This worked for me when mouseX=0 in fullscreen mode.

Upvotes: 3

Related Questions