2013-04-02 3 views
3

을 작성해야합니다.은 Flash Develop에서 매우 간단하고 전체 화면으로 드래그 앤 드롭하는 게임이어야합니다. 하나의 실망스러운 경우를 제외하고는 잘 작동합니다.mouseX = 0 일 때 AS3 마우스 이벤트가 실행되지 않음

스테이지에 항목을 추가하고 MOUSE_DOWN 리스너를 추가 한 다음 해당 수신기를 들으면 드래그를 시작합니다. 그런 다음 드래그를 중지 할시기를 알아 내기 위해 MOUSE_UP 리스너를 추가합니다. 다시 말하지만, mouseX = 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 인 경우이 기능이 유용했습니다.

관련 문제