2011-10-10 314 views
0

我試圖製作一個坦克遊戲,在其中我可以移動坦克,讓他們互相拍攝等等......我堅持使用Flash Pro創建外部類,因爲我習慣使用OOP語言像Java一樣。我創造了代表所有坦克的坦克類。這裏是這個類的代碼:ActionScript3外部類鍵盤監聽器

package src 
{ 
    import flash.display.MovieClip; 
    import flash.events.KeyboardEvent; 
    import flash.ui.Keyboard; 

    public class Tank extends MovieClip 
    {  
     public function Tank():void {   
      this.addEventListener(KeyboardEvent.KEY_DOWN, move); 
      this.addEventListener(MouseEvent.CLICK, test); 
     } 
     protected function move(event:KeyboardEvent):void { 
      trace("key down"); 
      switch (event.keyCode) { 
       case Keyboard.UP: { 
        this.y += -5;     
        break; 
       } 
       case 40: { 
        this.y += 5;      
        break; 
       } 
       case Keyboard.LEFT: { 
        this.x += -5;     
        break; 
       } 
       case Keyboard.RIGHT: { 
        this.x += 5;      
        break; 

       } 

      } 
     } 

    } 

} 

問題是,當我按任意鍵時,動作偵聽器似乎永遠不會被調用。 trace()不被調用。但我試圖添加一個鼠標監聽器來測試它,它工作。所以我猜它是Keyboard事件監聽器類的問題?我在網上看到的每個人都使用stage.addEventListener(KeyboardEvent.KEY_DOWN,move)方法。

有人能告訴我爲什麼它不起作用嗎?有沒有解決方法?(只能通過添加外部類)謝謝!

回答

0

嘗試添加您的關鍵聽衆到舞臺。

stage.addEventListener(KeyboardEvent.KEY_DOWN, move);

階段總是能夠檢測到的重要事件時,您的應用程序是關注的焦點。

+0

是的,我的工作!但是,它如何在「這個」上不起作用呢? – fall

+0

在您的示例中,'Tank'實例將鍵盤監聽器添加到自己 - 這意味着它們需要具有鍵盤焦點來接收鍵盤事件。請參閱:[Stage.focus()](http://help.adobe.com/zh_CN/FlashPlatform/reference/actionscript/3/flash/display/Stage.html#focus) –

+0

「this」是一個指向運行代碼的對象實例。在你發佈的例子中,「this」是指坦克的單個實例。 「this」是ActionScript中的隱式引用,實際上並不需要。 「stage.addEventListener」與「this.stage.addEventListener」相同。 – HotN