2013-04-02 108 views
3

我正在创建什么应该是一个非常简单的全屏拖放式Flash游戏。除了一个令人沮丧的例子,它工作正常。当鼠标X = 0时,AS3鼠标事件不会触发

我将项目添加到舞台上,向它们添加MOUSE_DOWN侦听器,并在听到该侦听器时开始拖动。然后我添加一个MOUSE_UP侦听器来确定何时停止拖动。再说一遍,除非鼠标X = 0,否则这种方法可以正常工作。当鼠标完全位于屏幕左侧时,鼠标向上或鼠标向下不会触发任何侦听器。我也将它从全屏模式中取出,并且如果鼠标位于或低于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); 
    } 

回答

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

    } 

} 

这对我在mouseX = 0时在全屏模式下工作。

相关问题