2011-11-05 63 views
1

我想創建一個側滾動遊戲。其中,我希望玩家能夠射擊吹飛鏢。因爲它是現在,如果玩家持有空格鍵,玩家的(這是一個MovieClip)拍攝動畫循環。我希望動畫只能在每個空格鍵上播放一次。Flash Actionscript 3.0動畫循環

這裏是代碼,我使用:已被釋放

 // Process the pressed key(s) 
    public function KeyPressed(event:KeyboardEvent):void { 
     // The Left Key was pressed 
     if (event.keyCode == Keyboard.LEFT) { 
      leftKeyPressed = true; 
     } 

     // The Right Key was pressed 
     if (event.keyCode == Keyboard.RIGHT) { 
      rightKeyPressed = true; 
     } 

     // The Up Key was pressed 
     if (event.keyCode == Keyboard.UP) { 
      upKeyPressed = true; 
     } 

     // The Down Key was pressed 
     if (event.keyCode == Keyboard.DOWN) { 
      downKeyPressed = true; 
     }   
     // The Space Key was pressed 
     if (event.keyCode == Keyboard.SPACE) { 
      spaceKeyPressed = true; 
     } 
    } // End of 'KeyPressed()' function  

該方法確定哪個鍵(一個或多個)::

該方法確定哪個鍵(一個或多個)被按下

 public function KeyReleased(event:KeyboardEvent):void { 
     // The Left Key was released 
     if (event.keyCode == Keyboard.LEFT) { 
      leftKeyPressed = false; 
     } 

     // The Right Key was released 
     if (event.keyCode == Keyboard.RIGHT) { 
      rightKeyPressed = false; 
     } 

     // The Up Key was released 
     if (event.keyCode == Keyboard.UP) { 
      upKeyPressed = false; 
     } 

     // The Down Key was released 
     if (event.keyCode == Keyboard.DOWN) { 
      downKeyPressed = false; 
     } 

     // The Space Key was released 
     if (event.keyCode == Keyboard.SPACE) { 
      spaceKeyPressed = false; 
     } 
    } // End of 'KeyReleased()' function 

這是播放播放器的一個拍攝動畫的代碼示例:

if (onGround && !downKeyPressed && spaceKeyPressed) { 
        player.gotoAndStop(7); 
} 

我該如何防止第7個播放器幀持續循環?我只想在空格鍵被按下時動畫播放一次。

謝謝!

回答

0

只是一些快速的想法。

1)添加一個標誌來表示玩家當前正在進行動畫,isThrowing = false;例如。當您啓動第一個飛鏢並將其添加到上面的if語句中時,將其設置爲true。在動畫循環結束時,再次將其設置爲false。

2)另一種方法是在您發送飛鏢時刪除事件監聽器(或其中一些),並在飛鏢完成後再次添加它們。

可能還有其他方法,但這些應該會給你一些探索的場所。

祝你好運!

+0

謝謝!我可以試試這些想法。 :) –

2

只需將stop();添加到動畫片段的第7幀即可。

但是,也許你更好地使用這種遊戲的進入幀事件,這裏是從一個遊戲,我正在做一個編輯的切口:

private var controls:Object = new Object(); 

    private function addListeners() 
    { 
     stage.addEventListener(KeyboardEvent.KEY_DOWN,controlKeyboard); 
     stage.addEventListener(KeyboardEvent.KEY_UP,controlKeyboard); 
     stage.addEventListener(Event.ENTER_FRAME,updateGame); 
    } 

    private function controlKeyboard(e:KeyboardEvent) 
    { 
     var keydown:Boolean = new Boolean(); 

     if (e.type == "keyDown") 
     { 
      keydown = true; 
     } 

     controls[e.keyCode] = keydown; 
    } 

    private function updateGame(e:Event) 
    { 
     if (controls[Keyboard.SPACE]) 
     { 
      if (player.currentFrame == 1) 
      { 
       player.gotoAndPlay(2); 
      } 
     } 

     if (player.currentFrame == 7) 
     { 
      player.gotoAndStop(1); 
     } 

    } 
+0

謝謝,托馬斯。然而,我只是嘗試這樣做:'\t \t \t如果(player.currentFrame == 6){ \t \t \t \t player.gotoAndStop(2); \t \t \t}' (6幀是玩家的拍攝動畫 - 2幀是玩家的站立靜止幀)。 這立即停止拍攝動畫,併到站立架。這發生得如此之快,以至於你無法總是看到拍攝動畫。 –

+0

拍攝動畫位於第6幀,因此您的意思是第6幀有動畫的動畫片段,或者您的意思是動畫從第2幀開始,到第6幀結束? –

+0

我試圖按照你發佈的代碼。第6幀是玩家的拍攝動畫。第2幀是站立式動畫。在這樣做的過程中,我試圖讓玩家一次完成拍攝動畫,然後再回到站立狀態。 –