我正在尝试创建一个侧滚动游戏。在其中,我希望玩家能够射击飞镖。
就像现在一样,如果玩家持有空格键,则播放器(即MovieClip)拍摄动画循环播放。我希望每个空格键按下动画只播放一次。
以下是我使用的代码:
此方法确定按下了哪些键:
// 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 :(得分: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);
}
}
答案 1 :(得分:0)
只是几个简单的想法。
1)添加一个标志,表示玩家当前正在动画,isThrowing = false;例如。当您启动第一个飞镖并将其添加到上面的if语句时,将其设置为true。在动画循环结束时,再次将其设置为false。
2)另一种方法是在你发送飞镖时删除事件监听器(或其中一些),并在完成飞镖时再次添加它们。
可能有其他方法,但这些方法应该为你提供一些探索的场所。
祝你好运!