2013-10-07 3 views
1

У меня проблема с моими командами клавиатуры, я пытаюсь заставить своего игрока играть анимацию , когда он идет влево/вправо. Клавиатура дает команду игроку перемещаться и воспроизводить анимацию. проблема в том, что он продолжает бесконечную анимацию и не позволяет ей закончить.Как заставить мою команду клавиатуры заставить игрока играть через анимацию?

stage.addEventListener (KeyboardEvent.KEY_DOWN, keyPressed); stage.addEventListener (KeyboardEvent.KEY_UP, keyRelease);

function keyRelease(k:KeyboardEvent) 
{ 
    movement = 0; 
    gotoAndPlay("standing"); 
} 

function keyPressed(k:KeyboardEvent) 
{ 
    if(k.keyCode==Keyboard.D) 
    { 
    movement = 5; 
    gotoAndPlay("walking"); 
    } 
    if(k.keyCode==Keyboard.A) 
    { 
    movement = -5; 
    gotoAndPlay("walking");  
    } 
} 

Я полагаю, что я могу пройти через весь код и сделать какой-то длинный список МСФ ...

но я figuerd там должен быть лучший способ

ответ

0

При добавлении события Клавиатура, как только нажата клавиша, KeyboardEvent.KEY_DOWN отправляется постоянно, если он не выпущен. Вероятно, происходит то, что gotoAndPlay("walking") постоянно вызывается, поэтому всегда перезапускает анимацию.

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

function keyRelease(k:KeyboardEvent) 
{ 
    movement = 0; 
    gotoAndPlay("standing"); 
} 

function keyPressed(k:KeyboardEvent) 
{ 
    if(k.keyCode==Keyboard.D && movement != 5) 
    { 
     movement = 5; 
     gotoAndPlay("walking"); 
    } 
    if(k.keyCode==Keyboard.A && movement != -5) 
    { 
     movement = -5; 
     gotoAndPlay("walking");  
    } 
} 

Это не точно так, как я бы рекомендовал его (выяснить состояние анимации от текущей скорости движения), но это простое решение и должно работать для этого вопроса.

+0

Ох спасибо !!! К тому времени, как я получил ваш ответ, я как бы сделал что-то полуслова тому, что вы описали, но я сделал его с таймерами, что вызвало тонну боли в **! вы, кажется, лучше, я проверю его сразу , но есть ли способ сделать нажатия клавиш для отправки строки кода только один раз? Я уже представляю себе массу проблем в будущем, если у меня не будет такого варианта ... –

+0

Не совсем. Событие клавиатуры пытается имитировать способ работы с клавиатурой - в том случае, если вы нажмете его один раз, он отправит ключ, подождать несколько миллисекунд, а затем начнет отправлять эту клавишу постоянно. Это вроде как ожидалось. Лучший способ избежать этого - иметь «состояния» для нажатия клавиш (например, isMovingLeft, isMovingRight), а клавиша down/release только изменяет состояние, если оно отличается. Может быть немного неудобно, но он работает хорошо. – zeh

+0

В качестве побочного примечания некоторые классы сторонних игр/ввода ключей облегчают вам также абстрагирование, и вы можете просто проверить, что что-то isPressed(), а не слушать события «вниз»/«вверх». Или вы можете создавать свои собственные классы, чтобы скрыть функциональность повтора вниз/вверх, постоянно проверяя состояние ключа перед отправкой события. – zeh

Смежные вопросы