Flash e Flex SDK / AS3 - Como manter o foco do teclado?

Estou escrevendo um aplicativo flash no Flex / AS3 e não consigo atribuir o foco do teclado a ele. Eu estava ciente desse problema no início do desenvolvimento e adicionei uma tela inicial com um botão "reproduzir agora", para atrair o usuário a clicar. No entanto, o usuário deve clicar uma segunda vez no aplicativo para que o teclado funcione!

Para piorar a situação, tenho um atalho no jogo que o leva ao menu principal. Se você retornar ao menu principal e clicar no botão "reproduzir agora", o SWF perde o foco novamente!

Provavelmente estou bagunçando objetos filhos ou destruindo acidentalmente um objeto que capturou o foco do teclado, mas não tenho muita certeza de como ele funciona. Você pode me ajudar a apontar na direção certa?

Meu aplicativo é um único arquivo .SWF e estou executando-o diretamente no meu navegador (sem chamá-lo por meio de uma página da Web, embora eu acabe). Aqui está o arquivo em questão:

http: //www.space-squid.com/game/Main.sw Quando você clica em "Normal", é necessário clicar uma segunda vez para realmente capturar o foco do teclado. :( Sinta-se livre para perguntar

Editar Aqui está um código que estou usand

Alguns dos primeiros códigos executados na minha classe principal:

empty_sprite = new Sprite();
addChild(empty_sprite);
empty_sprite.stage.addEventListener(keyboard hooks...);

Eu também tentei isso no caso de eu ter definido os ganchos no meu objeto raiz:

this.stage.addEventListener(keyboard hooks...);

Caso o sprite vazio estivesse causando problemas:

background_image = new BackgroundImage();
background_image.x = etc etc alignment data;
addChild(background_image);
background_image.stage.addEventListener(keyboard hooks...)

Em todos esses exemplos, meus ganchos de teclado funcionam bem, desde que eu clique na segunda vez ... mas nunca na primeira. :

SECOND EDIT: Bem, reduzi o problema. Talvez alguém possa me ajudar a resolver isso, provavelmente é um problema de estrutura:

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);
}

Como você pode ver, eu crio o botão play now - e parece que isso se torna o objeto de foco. Meus eventos de teclado não estão sendo presos, pois é o plano de fundo que está procurando o foco. Não tenho certeza se isso faz sentido, espero que alguém possa me esclarecer com isso!

Se eu comentar essa única linha (removeChild (PlayNowButton)), o jogo funcionará perfeitamente e manterá o foco do teclado - com a desvantagem de ter um botão "playnow" sobreposto na tela para sempr

Para ser sincero, nem tenho certeza se o jogo em si recebe o foco no primeiro clique, mas não sei como testar isso.

questionAnswers(2)

yourAnswerToTheQuestion