Показать сообщение отдельно
Старый 31.08.2013, 13:43
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 2  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,600
Записей в блоге: 17
Попробуй повесить слушатель события на stage.

А вообще (ничего, что я на ты?) – сложно ты всё придумал.
Заведи хэш
Код AS3:
private var _pressedKeys:Object = {}
Слушатели сделай элегантными
Код AS3:
private function gameKeysUp(e:KeyboardEvent):void{
  _pressedKeys[e.keyCode] = false;
}
private function gameKeysDown(e:KeyboardEvent):void{
  _pressedKeys[e.keyCode] = true;
}
Заведи метод для определения, нажата ли клавиша. Раз у тебя клавиши дублируются, не стесняйся создать "таблицу алиасов".
Код AS3:
private static const ALIASES:Object = { }
/* я неуверен, можно ли сразу создать значения из чисел прямо в определении, поэтому определю ниже */
{
ALIASES[65] = 37;
ALIASES[68] = 39;
ALIASES[87] = 38;
ALIASES[83] = 40;
};
private function isKeyDown(keyCode:int):Boolean{
  //Все понятно, если кнопка зажата
  if (_pressedKeys[keyCode]) return true;
  //проверяем, есть ли такая кнопка в таблице алиасов. Если есть, то мы должны проверить ещё и её алиас  
  if (keyCode in ALIASES) return(_pressedKeys(ALIASES[keyCode]));
  return false; //здесь если совсем ничего не зажато
}
Теперь тебе стоит работать только с клавишами 65, 68, 87 и 83. Запросив isKeyDown(65) метод вернёт истину, если нажата клавиша с кодом 65 или с кодом 37.

QA-секция:
Q: но ты совсем забыл про !gameMenuPaused условие! Я вставлю его сам.
A: конечно, отсюда не слишком понятна цель этого условия, но мне кажется, это чтобы персонаж не воспринимал кнопки во время паузы. Это неправильно представь ситуацию, что игрок зажал "вправо" и включил меню паузы, а потом отжал вправо. Убрав паузу игрок продолжит бежать вправо, потому что флаг правой клавиши не снялся как раз из за этого условия.

P.S. фигачил код прямо с форума, за работоспособность не ручаюсь.