|
|
|||||
[+4 07.04.12]
[+1 20.01.12] Регистрация: Nov 2009
Адрес: Украина, Славутич
Сообщений: 263
|
менеджер кейкодов клавиатуры
Как лучше? вот так:
private var keypressed:Vector.<uint> = new Vector.<uint>; private function keyPressed(e:KeyboardEvent):void { var bool:Boolean = false; for (var i:uint = 0; i < keypressed.length; i++) { if (keypressed[i]==e.keyCode) { bool=true; } } if (!bool) { keypressed.push(e.keyCode); } } private function keyUnpressed(e:KeyboardEvent):void { for (var i:uint = 0; i < keypressed.length; i++) { if (keypressed[i]==e.keyCode) { keypressed.splice(i,1); i--; } } } private var keyPressed:uint = 0; private function keyDownHandler(e:KeyboardEvent):void { switch(e.keyCode) { case 87: // w keyPressed |= 1; break; case 65: // a keyPressed |= 2; break; case 83: // s keyPressed |= 4; break; case 68: // d keyPressed |= 8; break; } } private function keyUpHandler(e:KeyboardEvent):void { switch(e.keyCode) { case 87: // w keyPressed -= 1; break; case 65: // a keyPressed -= 2; break; case 83: // s keyPressed -= 4; break; case 68: // d keyPressed -= 8; break; } } Последний раз редактировалось anmelegov; 25.03.2012 в 03:47. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Создаете new Vector.<Boolean>(0xFF, true)
Адрес каждой ячейки (число) – это код клавиши, а в ячейке соответственно хранится true или false, нажата или нет. Добавлено через 6 минут
__________________
Reality.getBounds(this); |
|
|||||
[+4 07.04.12]
[+1 20.01.12] Регистрация: Nov 2009
Адрес: Украина, Славутич
Сообщений: 263
|
я вынес в отдельный класс вообще и сделал со словарем
package { import flash.display.Stage; import flash.events.KeyboardEvent; import flash.utils.Dictionary; public class KeyboardManager { private var m_pressedKeys:uint = 0; private var keyDictionary:Dictionary; public function KeyboardManager(stage:Stage):void { stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler); stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler); keyDictionary = new Dictionary(); keyDictionary[87] = 1; // w keyDictionary[65] = 2; // a keyDictionary[83] = 4; // s keyDictionary[68] = 8; // d } private function keyDownHandler(e:KeyboardEvent):void { m_pressedKeys |= keyDictionary[e.keyCode]; } private function keyUpHandler(e:KeyboardEvent):void { m_pressedKeys -= keyDictionary[e.keyCode]; } public function get pressedKeys():uint { return m_pressedKeys }; } } можно как-то слушать изменение переменной m_pressedKeys? или надо в оба хендлера проверки добавлять? |
|
|||||
Регистрация: May 2010
Сообщений: 543
|
Словарь здесь не нужен. Посмотрите еще раз внимательно на пример Wolsh'a
__________________
Вы грабите бедных людей. Парень со свирелью накажет вас. Хонгильдон (с) |
|
|||||
[+4 07.04.12]
[+1 20.01.12] Регистрация: Nov 2009
Адрес: Украина, Славутич
Сообщений: 263
|
Цитата:
Добавлено через 5 минут как потом этот массив обрабатывать? если for each сделать то будет 255 итераций? Добавлено через 24 минуты в моем способе тоже обработка не очень: получается если нажата только "последняя кнопка" то приходится делать 4 итерации, наверно самый правильный способ это самый первый =) |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Не, если Вас только 4 постоянные клавиши "в сад" интересуют, то фиг бы с ним. Полный слепок клавиатуры полезен когда предполагается ее почти всю задействовать, да всякие фишки типа кеймаппинга при этом использовать (переназначения клавиш, как в "больших" играх, да с сохранением измененных настроек).
__________________
Reality.getBounds(this); |
|
|||||
[+4 07.04.12]
[+1 20.01.12] Регистрация: Nov 2009
Адрес: Украина, Славутич
Сообщений: 263
|
Цитата:
Добавлено через 1 минуту ну у меня в свиче в первой строчке стоит чтобы если 0, то дальше не проверяло Добавлено через 10 минут че-то туплю... там 0 нужен =) Добавлено через 12 минут или нужен... фак.. запутался |
Часовой пояс GMT +4, время: 06:36. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|