![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Feb 2008
Сообщений: 72
|
Нашел примерно следующее:
var keyArray:Array = new Array(); var i:Number; for (i=0; i<222; i++) { keyArray.push([i,false]); } stage.addEventListener(KeyboardEvent.KEY_DOWN,checkKeysDown); stage.addEventListener(KeyboardEvent.KEY_UP,checkKeysUp); function checkKeysDown(event:KeyboardEvent):void { keyArray[event.keyCode][1]=true; } function checkKeysUp(event:KeyboardEvent):void { keyArray[event.keyCode][1]=false; } function isKeyDown(X:Number) { return keyArray[X][1]; } ![]() |
|
|||||
|
Регистрация: May 2003
Адрес: Tallinn
Сообщений: 3,182
|
package ee.cfco.darkness.model.userControls
{
import com.adobe.utils.ArrayUtil;
public class KeyHandler
{
public static var keysPressed:Array = new Array();
public static var keyProcessed:Boolean;
public static var movementEnabled:Boolean = true;
public static function clear():void {
keysPressed = new Array();
keyProcessed = false;
}
public static function someKeyIsDown():Boolean {
return KeyHandler.keysPressed.length > 0;
}
public static function isDown(key:int):Boolean {
for each(var k:int in KeyHandler.keysPressed) {
if (k == key) return true;
}
return false;
}
public static function keyDown(key:int):void {
KeyHandler.keysPressed.push(key);
KeyHandler.keysPressed = ArrayUtil.createUniqueCopy(KeyHandler.keysPressed);
}
public static function keyUp(key:int):void {
ArrayUtil.removeValueFromArray(KeyHandler.keysPressed, key);
}
}
}
|
|
|||||
|
А зачем ее использовать? Вижу смысл только в том случае, если вы хотите какую-то клавишу использовать в качестве модификатора.
__________________
Дело не в тебе |
|
|||||
|
Регистрация: Feb 2008
Сообщений: 72
|
CrazyFlasher - спасибо
я правда тут еще один вариант нашел:package{ import flash.events.KeyboardEvent; import flash.display.Stage; import flash.utils.Dictionary; public class KeyController{ private var _keys:Dictionary; public function KeyController(stage:Stage) { _keys = new Dictionary(); stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler); stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler); } public function isKeyDown(keyCode:uint):Boolean { return _keys[keyCode]; } private function keyDownHandler(event:KeyboardEvent):void { _keys[event.keyCode] = true; } private function keyUpHandler(event:KeyboardEvent):void { _keys[event.keyCode] = false; } } } Обрабатываем нажатые клавиши(if (isKeyDown(...) и реакции на них. Перемещаем обьект на сцене. Обрабатываем столкновения. ![]() |
|
|||||
|
Регистрация: Jun 2002
Сообщений: 391
|
Лишняя сущность.
По нажатиям можно сразу обрабатывать реакции, ну или сохранять их куда-нибудь, как вы сейчас это с клавишами делаете. |
|
|||||
|
Регистрация: Oct 2003
Адрес: Москва
Сообщений: 328
|
Если при нажатой клавише флешка потеряет фокус, то KEY_UP не сработает и клавиша "залипнет" в нажатом состоянии. Добавьте
|
|
|||||
|
MerlinTwi, а если флешка потеряет фокус, а клавиша отжата не будет, то при возвращении фокуса ивент KEY_DOWN снова выстрелит?
__________________
Дело не в тебе |
|
|||||
|
Регистрация: Oct 2003
Адрес: Москва
Сообщений: 328
|
Нет, не выстрелит. Нужно будет отпустить и нажать клавишу снова. Что гораздо меньшая "потеря" нежели "залипшие" клавиши.
Такое вообще может произойти реально очень редко, чтобы юзер вернул фокус на флешку не отпуская кнопку ![]() |
|
|||||
|
Привет. Сегодня впервые сел за АС3. Кое-что уже проясняется. Но вот не понял, как воспользоваться ф-цией isKeyDown() класса KeyController (описан выше) ? Я создаю отдельный класс KeyController.as, записываю его туда же, куда и основной класс. В основном классе пишу import KeyController; потом в одной из ф-ций основного класса пишу и так trace (isKeyDown(48)); и так trace (KeyController.isKeyDown(48)) - не работает. "Call to a possibly undefined method isKeyDown" . Да и на сам класс KeyController никакой реакции, пишу там что попало - ошибок не выдает. Как его подключить?
__________________
Платон мне друг, но истина в вине. Последний раз редактировалось sinya; 03.12.2008 в 19:54. |
|
|||||
|
Регистрация: Jul 2007
Адрес: Дубна, Моск.обл.
Сообщений: 108
|
sinya
Надо создать экземпляр класса и передать ссылку на stage: |
![]() |
![]() |
Часовой пояс GMT +4, время: 00:53. |
|
|
« Предыдущая тема | Следующая тема » |
|
|