2013-06-09 3 views
0

Я сделал простую игру в flex. Вы управляете падающими блоками, и ваша цель - уничтожить вирусы. Это почти копия игры 90-х годов Марио. Я сделал так, чтобы вы управляли блоками с помощью клавиш со стрелками, и вы вращаете блок с пространством. Все работает отлично, как при игре. Однако, когда я переключаюсь на другую программу, и приложение не в фокусе, и я возвращаюсь к игре, всякий раз, когда я нажимаю пространство, игра перезапускается. Это похоже на вызов функции, которая повторно инициализирует игру и сбрасывает все переменные в начальные значения. Игра выполнена с несколькими компонентами NavigationContent, которые действуют как сцены. Игра не возвращается к стартовому экрану, когда я нажимаю пробел, он просто сбрасывает игру. Это действительно странно. Существует ли какой-либо метод по умолчанию, который вызывает это поведение? Кто-нибудь знает?Нажатие пробела делает странные вещи

РЕДАКТИРОВАТЬ: Проблема возникает - как кажется - исключительно, когда я связываю функцию с пробелом (keyCode 32). Я решил проблему, перевязав ключ «CTRL». Но все же было бы здорово узнать, что происходит с ключом SPACE. Игра работает отлично, если я использую Internet Explorer. Другие браузеры не работают с клавишей пробела. Это одна и та же проблема со всеми из них.

EDIT: Это как слушатель событий выглядит:

this.stage.addEventListener (KeyboardEvent.KEY_DOWN, moveBlocksKeyboardEvent);

Даже если я прокомментирую весь код в методе moveBlocksKeyboardEvent, игра все еще перезапускается. Это исключительно при нажатии клавиши SPACE. Если я удерживаю клавишу, блокируют блоки. Когда я выпускаю кнопку пробела, игра перезапускается. Как будто это какой-то метод повторной инициализации, связанный с событием KEY_UP или что-то в этом роде.

+0

Является ли это мобильная игра? Или настольная игра? Или браузерная игра? Является ли клавиша пробела в игровом процессе каким-то образом? ЕСЛИ так, как. Без пересмотра кода трудно даже знать, с чего начать. – JeffryHouser

+0

Нет волшебного слушателя KEY_UP, который прослушивает клавишу SPACE. Самое логичное, что вы добавили это где-то в свой код :) Один из способов подтверждения: сделал ли ключ SPACE что-то, когда вы назначили слушателя клавише CTRL. Вы определили способ сброса игры? Если так прокомментировать этот метод, тогда, когда он компилируется, он будет генерировать ошибку, чтобы вы могли проверить все места, где используется функция сброса ... –

ответ

0

Этот тип поведения часто привязывается к нулевому или неопределенному значению, вызывая скачок бессмысленного кода, который затем приводит к сбросу.

Убедитесь, что обработчик события для нажатия клавиши прикреплен к действительному объекту; если вы используете «этап», убедитесь, что он существует. Когда вы переходите из фокуса, обработчик события может быть связан с нулевым объектом; при повторном входе он больше не существует, и поэтому вы получаете поведение сброса.

Эта нить может помочь предоставить более подробную информацию: Adding a key listener in Action Script 3

+0

Благодарим вас за быстрый ответ. Я просмотрел ссылку, которую вы мне дали, и я думаю, что это имеет какое-то отношение к ней. Однако, когда я привязываю функцию «спина» к другому коду, игра отлично работает, когда я выхожу из фокуса и обратно. Проблема возникает - как кажется - эксклюзивно, когда я связываю функцию с пробелом (keyCode 32). Я решил проблему, перевязав ключ «SHIFT». Но все же было бы здорово узнать, что происходит с ключом SPACE. Игра прекрасно работает с пространством, если я использую Internet Explorer. Другие манипуляторы не работают с клавишей пробела. Это одна и та же проблема со всеми из них. – Weson

Смежные вопросы