Пауза/рывок при нажатии клавиши

То что касается флеша, но не касается ВКонтакте API. Например проблемы при создании прыгающего мячика.

Пауза/рывок при нажатии клавиши

Сообщение Agiliter » 15 окт 2014, 20:56

Добрый день! Пишу обработчик событий для клавиатуры (left, right ,up и down) и заметил одну неприятную вещь. После первого нажатия клавиши следует пауза, а далее идут повторы нажатой кнопки. Вот эта вот пауза с последующим дерганьем очень нелицеприятно смотрится когда, например, перемещаешь квадрат стрелками на клавиатуре, а он будет дергать при старте как загибающийся запорожец с резко брошенным сцеплением на приличных оборотах при включенной передаче. Можно ли от этого избавиться? Во многих игрушках проблем таких нет. Дело в коде или это особенность as3?

  1. addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);      
  2. addEventListener(KeyboardEvent.KEY_UP,keyUpHandler);
  3.  
  4. private function keyDownHandler(e:KeyboardEvent):void
  5. {
  6. if (e.keyCode == Keyboard.LEFT) leftPressed = true;
  7. if (e.keyCode == Keyboard.RIGHT) rightPressed = true;
  8. if (e.keyCode == Keyboard.UP) upPressed = true;
  9. if (e.keyCode == Keyboard.DOWN) downPressed = true;
  10.  
  11. move();
  12.  
  13. }
  14. private function keyUpHandler(e:KeyboardEvent):void
  15. {          
  16. if (e.keyCode == Keyboard.LEFT) leftPressed = false;
  17. if (e.keyCode == Keyboard.RIGHT) rightPressed = false;
  18. if (e.keyCode == Keyboard.UP) upPressed = false;
  19. if (e.keyCode == Keyboard.DOWN) downPressed = false;           
  20. }
  21. private function move():void
  22. {
  23.             if (leftPressed)
  24.                 box.move("left");
  25.             if (rightPressed)
  26.                 box.move("right");
  27.             if (upPressed)
  28.                 box.move("up");
  29.             if (downPressed)
  30.                 box.move("down");          
  31. }
С уважением,
М.Ф.
Agiliter

 
Автор темы
Сообщения: 112
Зарегистрирован: 01 фев 2014, 13:46
Благодарил (а): 29 раз.
Поблагодарили: 0 раз.

Чтобы убрать блок с рекламой, зарегистрируйтесь на форуме или войдите.

Google
 



Re: Пауза/рывок при нажатии клавиши

Сообщение XELAD » 15 окт 2014, 21:23

Задержка перед началом повтора символа устанавливается на клиенте. Передвигать что-либо при срабатывании keyDownHandler не рекомендуется.
XELAD

 
Сообщения: 205
Зарегистрирован: 17 июл 2012, 05:25
Благодарил (а): 13 раз.
Поблагодарили: 24 раз.

Re: Пауза/рывок при нажатии клавиши

Сообщение Agiliter » 15 окт 2014, 21:55

XELAD писал(а):Передвигать что-либо при срабатывании keyDownHandler не рекомендуется

А как тогда?
С уважением,
М.Ф.
Agiliter

 
Автор темы
Сообщения: 112
Зарегистрирован: 01 фев 2014, 13:46
Благодарил (а): 29 раз.
Поблагодарили: 0 раз.

Re: Пауза/рывок при нажатии клавиши

Сообщение dog » 16 окт 2014, 01:03

Попробуй в обработчик keyDownHandler, в самый конец добавить e.updateAfterEvent();
dog

 
Сообщения: 43
Зарегистрирован: 17 мар 2014, 15:18
Благодарил (а): 0 раз.
Поблагодарили: 9 раз.

Re: Пауза/рывок при нажатии клавиши

Сообщение XELAD » 16 окт 2014, 13:52

Пользуйтесь официальными уроками от Adobe. В уроке Movement-keys показано то, что вы пытаетесь сделать. Там использован enterFrame для движения чего-либо, проверяющий if(smthPressed){mc.moveSomewhere();}

За это сообщение автора XELAD поблагодарил:
Agiliter
XELAD

 
Сообщения: 205
Зарегистрирован: 17 июл 2012, 05:25
Благодарил (а): 13 раз.
Поблагодарили: 24 раз.


Вернуться в Программирование на Flash



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

cron