Показать сообщение отдельно
Старый 11.06.2014, 19:08
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 5  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Есть вариант по-проще
Код AS3:
package {
 
	import flash.display.Stage;
	import flash.events.Event;
	import flash.events.KeyboardEvent;
 
	public class Key {
 
		private static var initialized:Boolean = false;		
		private static var keysDown:Object = new Object();	
 
		public static function initialize(stage:Stage):void {
			if (!initialized) {
				stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
				stage.addEventListener(KeyboardEvent.KEY_UP, keyReleased);
				stage.addEventListener(Event.DEACTIVATE, clearKeys);
				initialized = true;
			}
		}
 
		public static function isDown(keyCode:uint):Boolean {
			if (!initialized) {
				throw new Error("Key class has not yet been initialized.");
			}
			return Boolean(keyCode in keysDown);
		}
		private static function keyPressed(event:KeyboardEvent):void {
			keysDown[event.keyCode] = true;
		}
		private static function keyReleased(event:KeyboardEvent):void {
			if (event.keyCode in keysDown) {
				delete keysDown[event.keyCode];
			}
		}
 
		private static function clearKeys(event:Event):void {
			keysDown = new Object();
		}
	}
}
Используется так:
Код AS3:
// в документ классе
Key.initialize(stage);
 
// а в любом другом месте проверяем
trace(Key.isDown(Keyboard.SPACE));
Цитата:
Как код нажатой в данный момент клавиши может находится в списке нажатых клавиш(_keys), если при отпускании клавиши он у вас из этого списка удаляется.
Могу предположить, что при потере фокуса с флешки. И второй вариант, который постоянно происходит в хроме, залипание клавиши
__________________
Ко мне можно и нужно обращаться на ты)