Я пишу флеш-приложение во Flex / AS3 и не могу назначить ему фокус клавиатуры. Я помнил об этой проблеме на ранней стадии разработки и добавил заставку с кнопкой «играть сейчас», чтобы побудить пользователя нажать. Тем не менее, пользователь должен затем нажать второй раз на приложение, чтобы клавиатура работала!
Что еще хуже, у меня есть ярлык в игре, который возвращает вас в главное меню. Если вы вернетесь в главное меню и нажмете кнопку «воспроизвести сейчас», SWF снова потеряет фокус!
Возможно, я испортил дочерние объекты или случайно уничтожил объект, который захватил фокус клавиатуры, но я не совсем уверен, как это работает. Можете ли вы помочь направить меня в правильном направлении?
Мое приложение представляет собой один файл .SWF, и я запускаю его прямо в своем браузере (не вызывая его через веб-страницу, хотя в конечном итоге я это сделаю). Вот этот файл:
http://www.space -squid.com / игра / main.swf
Когда вы нажимаете «Normal», вам нужно нажать второй раз, чтобы фактически захватить фокус клавиатуры. Не стесняйтесь задавать вопросы!
Редактировать: Вот код, который я использую.
Некоторые из первых кодов, которые выполняются в моем основном классе:
empty_sprite = new Sprite();
addChild(empty_sprite);
empty_sprite.stage.addEventListener(keyboard hooks...);
Я также попробовал это на тот случай, если мне нужно было установить хуки для моего корневого объекта:
this.stage.addEventListener(keyboard hooks...);
В случае, если пустой спрайт вызывал проблемы:
background_image = new BackgroundImage();
background_image.x = etc etc alignment data;
addChild(background_image);
background_image.stage.addEventListener(keyboard hooks...)
Во всех этих примерах мои зацепы клавиатуры работают нормально, пока я нажимаю второй раз ... но никогда не первый. :(
ВТОРОЕ РЕДАКТИРОВАНИЕ: Ну, я сузил проблему. Возможно, кто-то может помочь мне разобраться в этом, это, вероятно, структурная проблема:
public function Main {
Some stuff...
empty_sprite = new Sprite(); // Create a new stage sprite
addChild(empty_sprite);
empty_sprite.stage.addEventListener(keyboard hooks...);
addChild(BackgroundImage); // I lay down my background image which is persistant
addChild(PlayNowButton); // I display my PlayNow button to the screen
More stuff...
}
public function StartGame() {
removeChild(PlayNowButton); // This is the point of failure; this removes focus.
removeChild(otherMenuOptions);
...
addChild(gameComponents);
}
Как видите, я создаю кнопку воспроизведения сейчас - и кажется, что она становится объектом фокуса. Мои события клавиатуры не попадают в ловушку, так как это фон, который ищет фокус. Не уверен, что в этом есть смысл, надеюсь, кто-нибудь сможет меня поправить!
Если я закомментирую эту единственную строку (removeChild (PlayNowButton)), игра отлично работает и сохраняет фокусировку на клавиатуре - с обратной стороной, когда кнопка «playnow» накладывается на экран навсегда.
Если честно, я даже не уверен, получает ли игра когда-нибудь фокус на первом клике, но я не уверен, как это проверить.