Flash Actionscript 3.0 Цикл анимации - PullRequest
1 голос
/ 06 ноября 2011

Я пытаюсь создать игру с боковой прокруткой. В нем я хочу, чтобы игрок мог стрелять из дротиков.

Как и сейчас, если игрок держит пробел, анимация стрельбы игрока (который является 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 ]

2 голосов
/ 06 ноября 2011

Просто добавьте 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 голосов
/ 06 ноября 2011

Просто пара быстрых идей.

1) Добавьте флаг, чтобы указать, что игрок в данный момент анимирует, isThrowing = false;например.Установите его в true, когда вы включите первый дротик и добавите его в оператор if выше.В конце цикла анимации снова установите для него значение false.

2) Другим способом будет удаление слушателей событий (или некоторых из них) при отправке дротика и добавление их только приДротик готов.

Возможно, есть и другие способы, но они должны дать вам некоторые возможности для исследования.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...