2011-11-05 106 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帧是站立式动画。在这样做的过程中,我试图让玩家一次完成拍摄动画,然后再回到站立状态。 –