Flash Actionscript 3.0动画循环

时间:2011-11-05 20:36:32

标签: flash actionscript-3 animation movieclip

我正在尝试创建一个侧滚动游戏。在其中,我希望玩家能够射击飞镖。

就像现在一样,如果玩家持有空格键,则播放器(即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个玩家帧不断循环?我只想让动画在按空格键时播放一次。

谢谢!

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);
        }

    }

答案 1 :(得分:0)

只是几个简单的想法。

1)添加一个标志,表示玩家当前正在动画,isThrowing = false;例如。当您启动第一个飞镖并将其添加到上面的if语句时,将其设置为true。在动画循环结束时,再次将其设置为false。

2)另一种方法是在你发送飞镖时删除事件监听器(或其中一些),并在完成飞镖时再次添加它们。

可能有其他方法,但这些方法应该为你提供一些探索的场所。

祝你好运!