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.
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
Vous devez vous connecter pour publier un commentaire.
Le code que vous cherchez est:
Depuis Flash a obtenu focus, votre gestionnaire d'événements clavier est tout simplement pas focalisé dans l'application flash lui-même. Vous pouvez basculer, où l'accent est actuellement mis à l'intérieur de l'application à l'aide du code ci-dessus.
Sinon, au lieu de détruire la PlayNow bouton, ce qui la rend invisible fera l'affaire. Puis le rendre à nouveau visible, plus tard, quand vous en avez besoin. Très facile si c'est un Clip ou un objet Sprite:
(C'est dur d'écrire à moi-même de cette façon)
OriginalL'auteur Andy Moore
Je suppose que c'est un projet de navigateur?
Voici comment je le fais:
Aucun problème, assurez-vous que votre embed/objet de balisage a un ID et le Nom de l'attribut!
En supposant qu'il existe un seul fichier SWF dans votre document HTML/XML, une fois qu'il a le focus, il ne devrait jamais perdre - à moins que quelque chose d'autre dans le document ou un navigateur add-on est en conflit. Avez-vous une démonstration en direct, ou une pastie de la source de la page? (ndlr: si elle n'est pas dans un document, vous n'aurez pas de fin de navigateur problèmes)
J'ai un exemple ici: 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.
27 avril - j'ai regardé votre exemple, et c'était le travail. Est-ce parce que vous avez depuis fixe?
Yep, il fixe et posté une réponse ci-dessous pour moi. Je dois attendre avant que je puisse marquer bien 🙂
OriginalL'auteur