Flash & SDK Flex/AS3 - Comment garder le focus du clavier?

Je suis en train d'écrire une application flash en Flex/AS3, et je n'arrive pas à attribuer le focus du clavier. J'ai été conscient de ce problème dès le début dans le développement et l'ajout d'un écran de démarrage avec un bouton "jouer maintenant", pour inciter l'utilisateur à cliquer. Toutefois, l'utilisateur doit cliquer une seconde fois sur l'application pour le clavier de travail!

Pour aggraver les choses, j'ai un jeu de raccourcis qui vous renvoie au menu principal. Si vous revenez sur le menu principal, puis cliquez sur le bouton "jouer maintenant", le SWF perd le focus de nouveau!

Je suis probablement le désordre des objets enfants ou accidentellement détruire un objet qui a capturé le focus clavier, mais je ne suis pas tout à fait sûr de savoir comment il fonctionne. Pouvez-vous aider à me diriger dans la bonne direction?

Ma demande est simple .Fichier SWF, et je suis en cours d'exécution directement dans mon navigateur (pas de l'appeler via une page web, je crois que je vais finalement). Voici le fichier en question:

http://www.space-squid.com/game/Main.swf
Lorsque vous cliquez sur "Normal", vous devez cliquer une deuxième fois pour réellement saisir le focus du clavier. 🙁 N'hésitez pas à poser des questions!

Edit: Voici un code que j'utilise.

Certains de le premier code qui s'exécute dans ma classe de primaire:

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

J'ai aussi essayé cette juste au cas où j'aurais mis les crochets sur ma racine objet:

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

Dans le cas où le vide sinon sprite a été à l'origine de problèmes:

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

Dans tous ces exemples de mon clavier crochets fonctionnent bien, aussi longtemps que je clique sur le deuxième temps.. mais jamais la première. 🙁

DEUXIÈME EDIT: eh Bien, j'ai limité le problème. Peut-être que quelqu'un peut m'aider à me redresser, c'est probablement un problème de structure:

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

Comme vous pouvez le voir, j'ai créer le bouton jouer maintenant - et il semble que devient l'objet de focus. Mon clavier événements ne sont pas pris au piège comme c'est le fond qui est à la recherche pour la mise au point. Vous ne savez pas si cela fait sens, j'espère que quelqu'un peut redresser m'en sortir avec ce!

Si j'ai fait un commentaire que seule ligne (removeChild(PlayNowButton)) le jeu fonctionne parfaitement bien et conserve le focus du clavier - avec l'inconvénient d'avoir un "playnow" bouton en superposition sur l'écran pour toujours.

Pour être honnête, je ne suis même pas sûr que le jeu en lui-même reçoit le focus sur le premier clic, mais je ne sais pas comment faire pour tester.

Comment fonctionne exactement votre écran de démarrage des travaux? Fait-il partie de la même swf? Les applications se comportent différemment si l'option exécuter en tant que stand alone swf?
Il fait partie de la même SWF - et je ne suis pas d'utiliser une page web pour afficher le fichier, je suis juste le chargement du fichier SWF directement dans mon navigateur.

OriginalL'auteur Andy Moore | 2009-04-25