![]() |
Клавиатура, мышь, слушатели событий.
Приятно времени суток всем. есть такой вопрос, внутри приложения должны быть непрекращающиеся события привязанные к клавиатуре и мыши. Но, при вызове "KeyboardEvent.KEY_DOWN", при удержании клавиши, сначала дергается объект в нужном направлении, потом замирает, а только потом едет как надо. Движение с комбинированными клавишами работает только в первом рывке. В чем проблема, кто-то знает как это решается?? С мышью еще хуже, событие "MouseEvent.MOUSE_DOWN" должно выполнятся пока кнопка нажата, и удерживается. но оно выполняется только в момент единичного нажатия. типа "CLICK".
|
К сожалению в AS3 нету такого свойства, которое бы позволяло получить состояние клавиши нажата/ненажата. Запоминайте состояние: нажали - едем (больше не слушаем событие), отпустили - не едем.
|
В таких случаях при первом нажатии вешается слушатель ENTER_FRAME. и в нем события KEY_PRESSED/CLICK повторяются циклически и по KEY_RELEASED/MOUSE_UP удаляем ENTER_FRAME
|
Вот готовый класс by caseyryan для клавиатуры.
Код AS3:
Код AS3:
|
Видел решение у одного разработчика:
Код AS3:
|
Не то чтобы согласен. Нажатие может быть продолжительным действием, ведь есть же просто действие CLICK, вот оно одноразовое по идее. Но видимо, мне придется использовать подобную технологию (одну из любезно предоставленных мне здесь), и для мыши.
|
WaldeMar1321, найдите любое поле ввода, и зажмите любую буквенную клавишу на клавиатуре. Что происходит? Сначала появляется один символ, а через секунду символы появляются один за другим быстро. Вот и флешплеер обрабатывает нажатия так же.
|
WaldeMar1321, все события с устройств ввода делятся на 2 части - это начало и конец.
Например, событие клавиатуры KeyboardEvent.KEY_DOWN - это событие начала нажатия, а KeyboardEvent.KEY_UP - это отпускание клавиши. То, что при длительном нажатии клавиши он посылает событие многократно - неправильно с точки зрения логики, но с этим ничего не сделаешь. MouseEvent.MOUSE_DOWN же работает исключительно правильно с точки зрения логики, он отсылается один раз при нажатии левой кнопки мыши, и соответствующее событие ловится при отпускании - MouseEvent.MOUSE_UP. Представьте, какие трудности ждали бы программиста, если бы всё работало не так. Нужно, допустим, при нажатии на кнопку у клипа запустить анимацию, а при отпускании мыши - останавливать. Пишем Код AS3:
Логика этих событий такова, что есть MOUSE_DOWN - начало нажатия, и есть MOUSE_UP - конец нажатия, и всё, что между ними можно делать в обработчике ENTER_FRAME. Есть TouchEvent.TOUCH_BEGIN, а есть TouchEvent.TOUCH_END, что вызывается при нажатии на экран на сенсорном экране, и при отжатии. Есть KeyboardEvent.KEY_DOWN, а есть KeyboardEvent.KEY_UP. |
WaldeMar1321, а чем вам не угодило решение с добавлением полученного keyCode в массив?
|
наличие массива, там где он в принципе не нужен.
|
| Часовой пояс GMT +4, время: 05:50. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.