|
|
|||||
Регистрация: May 2012
Сообщений: 3
|
Прерывание события клавиатуры в AS3
Доброго времени суток .
Приступим сразу к делу, а дело в том, что имеются два объекта подписанные на событие KeyDown следующим кодом : И к примеру я держу кнопку "влево" и объект1 двигается , но когда нажимаю кнопку "D" начинает двигаться объект2, но перестает обьект1 хотя кнопку "влево" я до сих пор держу . И сам вопрос : Почему происходит такое прерывание ? И как его избежать ! . |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Никак, так работает клавиатура. Например, когда нажаты некоторые пары клавиш, нажатие третьей вообще не диспатчится. Это особенности контроллера клавиатуры и распайки клавиш.
Стройте функции так, чтобы при нажатии объект начинал и продолжал(!) двигаться, пока клавиша не будет отжата.
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: May 2012
Сообщений: 3
|
можете привести какой нибудь простенький пример?
|
|
|||||
Регистрация: Jan 2012
Сообщений: 35
|
Я еще добавлю свои пять копеек. Количество и качество отслеживаемых клавиш зависит не только от того какие и в какой комбинации были нажаты, но и от модели клавиатуры.
Обработка клавиш дело тонкое. И не всегда логичное. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Цитата:
private function handlerKeyDown(e:KeyboardEvent):void { if (e.keyCode == Keyboard.RIGHT) { addEventListener(Event.ENTER_FRAME, object1.move); } if (e.keyCode == Keyboard.D) { addEventListener(Event.ENTER_FRAME, object2.move); } } private function handlerKeyUp(e:KeyboardEvent):void { if (e.keyCode == Keyboard.RIGHT) { removeEventListener(Event.ENTER_FRAME, object1.move); } if (e.keyCode == Keyboard.D) { removeEventListener(Event.ENTER_FRAME, object2.move); } }
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: May 2012
Сообщений: 3
|
Недождавшись вначале ответа сделал сам, но через булевские переменные . Но у вас способ по изящней , спасибо.
|
|
|||||
Регистрация: May 2012
Сообщений: 18
|
Раз уж тему ещё не закрыли, тогда может мне кто-то подскажет, почему у мкня не работает данный код:
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKD); stage.addEventListener(KeyboardEvent.KEY_DOWN, onKU); function onFrR(e:Event):void{no1.x +=5;}; function onFrL(e:Event):void{no1.x -=5;}; function onFrU(e:Event):void{no1.y -=5;}; function onFrD(e:Event):void{no1.y +=5;}; function onKD(e:KeyboardEvent):void{ if(e.keyCode == Keyboard.RIGHT){ stage.addEventListener(Event.ENTER_FRAME, onFrR); } else if(e.keyCode == Keyboard.LEFT){ stage.addEventListener(Event.ENTER_FRAME, onFrL); } else if(e.keyCode == Keyboard.UP){ stage.addEventListener(Event.ENTER_FRAME, onFrU); } else if(e.keyCode == Keyboard.DOWN){ stage.addEventListener(Event.ENTER_FRAME, onFrD); } } function onKU(e:KeyboardEvent):void{ if(e.keyCode == Keyboard.RIGHT){ stage.removeEventListener(Event.ENTER_FRAME, onFrR); } else if(e.keyCode == Keyboard.LEFT){ stage.removeEventListener(Event.ENTER_FRAME, onFrL); } else if(e.keyCode == Keyboard.UP){ stage.removeEventListener(Event.ENTER_FRAME, onFrU); } else if(e.keyCode == Keyboard.DOWN){ stage.removeEventListener(Event.ENTER_FRAME, onFrD); } } |
|
|||||
|
|
|||||
Регистрация: May 2012
Сообщений: 18
|
Спасибо, но было бы лучше если бы вы обьяснили почуму не работает мой код. Сразу он работал нормально, а потом перестал совсем. В чём проблема?
|
Часовой пояс GMT +4, время: 09:25. |
|
« Предыдущая тема | Следующая тема » |
|
|