2013-08-27 181 views
1

因此,在我的Flash遊戲中用我的重啓按鈕不知疲倦地工作後,按鈕仍然不會註冊點擊。ActionScript 3 Button CLICK event not firing

以下是該按鈕的代碼: 爲什麼我認爲問題出在MouseEvent.CLICK上,因爲trace()標誌不顯示。

package 
{ 
    import flash.display.SimpleButton; 
    import flash.events.MouseEvent; 
    import flash.text.TextField; 
    import flash.text.TextFormat; 
    import flash.ui.Mouse; 
    /** 
     * ... 
     * @author Andrew Xia 
     */ 
    public class RestartButton extends SimpleButton 
    { 
     public function RestartButton(setX:Number, setY:Number) 
     { 
      this.x = setX; 
      this.y = setY; 
      addEventListener(MouseEvent.CLICK, onClick); 
     } 

     public function onClick(event:MouseEvent):void 
     { 
         trace("HELLO!"); 
      dispatchEvent(new NavigationEvent(NavigationEvent.RESTART)); 
     } 
    } 
} 

這裏是我添加的按鈕在屏幕上的代碼:

package 
    { 
    import flash.display.MovieClip; 
    import flash.display.SimpleButton; 
    import flash.events.MouseEvent; 
    import flash.text.TextField; 
    import flash.text.TextFormat; 
    import flash.ui.Mouse; 
    /** 
    * ... 
    * @author Andrew Xia 
    */ 
    public class GameOverScreen extends MovieClip 
    { 
     public var restartButton:RestartButton; 
     public var scoreLabel:TextField; 
     public var scoreBox:TextField; 

     public function GameOverScreen() 
     { 
      Mouse.show(); 
      restartButton = new RestartButton(0, 108); 
      addChild(restartButton); 

      var textFormat = new TextFormat(); 
      textFormat.size = 54; 

      scoreLabel = new TextField(); 
      scoreLabel.x = -185; 
      scoreLabel.y = -36.75; 
      scoreLabel.height = 73.5; 
      scoreLabel.width = 185; 
      scoreLabel.text = "SCORE: "; 
      scoreLabel.textColor = 0xFFFFFF; 
      scoreLabel.setTextFormat(textFormat); 
      addChild(scoreLabel); 

      scoreBox = new TextField(); 
      scoreBox.x = 0; 
      scoreBox.y = -36.75; 
      scoreBox.height = 73.5; 
      scoreBox.width = 143; 
      scoreBox.text = (String)(Main.playerScore); 
      scoreBox.textColor = 0xFFFFFF; 
      scoreBox.setTextFormat(textFormat); 
      addChild(scoreBox); 
     } 
    } 
} 

請幫幫忙,這個問題已經快把我逼瘋了,我敢肯定,它可能只是一個非常愚蠢的在我的部分錯誤,但我會很感激,如果你們可以幫助我。

+0

首先,做其他痕跡的工作?如果不是,則在「釋放」模式下進行編譯,在這種模式下跟蹤只是未編譯的。其次,你可能會添加時髦的代碼到偵聽器中,只是測試這些工作。說'parent.graphics.moveTo(0,0); parent.graphics.lineTo(500,500);'這樣精靈上的遊戲會在它上面劃一條線。如果它有效,你不得不將導航事件發送給'this',而是發送給其他類,直到'stage'。 – Vesper

回答

0

我看不出您爲任何按鈕狀態添加任何DisplayObject。如果沒有什麼可點擊的 - 點擊將永遠不會發生。

試試這個作爲你的RestartButton類:

package 
{ 
    import flash.display.SimpleButton; 
    import flash.events.MouseEvent; 
    import flash.text.TextField; 
    import flash.text.TextFormat; 
    import flash.ui.Mouse; 

    public class RestartButton extends SimpleButton 
    { 
     public function RestartButton(setX:Number, setY:Number) 
     { 
      super(GRAPHICS_FOR_UP, OVER, DOWN, HIT); // the object can repeat 

      this.x = setX; 
      this.y = setY; 
      addEventListener(MouseEvent.CLICK, onClick); 
     } 

     public function onClick(event:MouseEvent):void 
     { 
        trace("HELLO!"); 
      dispatchEvent(new NavigationEvent(NavigationEvent.RESTART)); 
     } 
    } 
} 

如果由於某種原因,你不希望添加的圖形,只是

super(null, null, null, HIT_GRAPHICS); 

添加災區現在,您可以點擊按鈕。

+0

這個類很可能是GUI設計的,因此對於hit,up,over,down的圖形都是預先放置的。但是,是的,擊中區域是要看的東西。 – Vesper

+0

我自己並沒有遇到這個問題,但我認爲如果他爲這個對象生成自定義類並且沒有定義super(),則會生成一個空白超級編譯時,並且對SimpleButton對象的實際引用爲空,但是它們可以用於DisplayObject ...很難知道真正的問題,只是猜測:)這在技術上甚至不是編程問題,只是故障排除。 –

+0

謝謝你的回答,不過vesper是正確的,因爲我已經通過GUI設計了按鈕,我不相信它是命中區域,因爲按鈕會通過動畫。 – AndrewX