2009-11-11 6 views
1

Je crée un jeu de type DDR pour une affectation et mon clavier semble répondre et tracer, mais uniquement si j'appuie d'abord sur l'écran avec la souris.Problème de la touche dans ActionScript 3

Comment puis-je me débarrasser de cela et le faire réagir tout de suite?

  • right_mc est la flèche qui se déplace
  • ArrowRight_mc est la flèche en haut
  • perfect_mc devrait apparaître brièvement
  • et ainsi une flèche éclatante Devrais-là où il frappe.

    if(rightDown){ 
        trace("right arrow"); 
        if(right_mc){ 
         if(right_mc.y >= ArrowRight_mc.y){ 
          perfect_mc.visible = true; 
          glowRight_mc.visible = true; 
         } 
        } 
    } 
    
+0

Marquer la bonne réponse serait bien! –

Répondre

0

La question ici est que le fichier SWF incorporé n'a pas le focus lorsque l'écran premier chargement. Vous pouvez lui attribuer un focus en utilisant JavaScript, mais dans mon expérience, cela ne fonctionne pas toujours à 100% du fait des variations dans la façon dont les navigateurs interprètent JS. Ce que beaucoup de gens font est d'avoir un gros bouton START suivant la charge du jeu afin que les joueurs doivent cliquer sur le fichier SWF pour commencer à jouer. Certains sites, même utiliser JS pour détecter quand le jeu a perdu le focus et mettra le jeu en pause et alerter l'utilisateur.

Je suppose que je n'ai pas exactement répondu à votre question parce que je ne suis pas très bien à JavaScript mais j'espère que cela vous indique la bonne direction.

+0

FYI: vous pouvez également déclencher un événement sur le client Flash lorsqu'il perd le focus, inutile d'utiliser javascript pour cela. – Tom

4

Cela a été un problème de longue date pour les développeurs Flash. Flash doit être mis au point avant de pouvoir détecter les événements clavier.

Le problème est que le navigateur n'accorde de focus au fichier SWF que lorsque l'utilisateur clique quelque part dans le fichier SWF. Cela a du sens cependant. Je ne veux pas que la page Web sur laquelle je suis en train de perdre la mise au point soit juste parce qu'il y a un film Flash incorporé quelque part. Il s'agit d'une fonctionnalité de sécurité , pour empêcher les bannières Flash d'être des enregistreurs de frappe silencieux. Cependant, dans certains cas, il est logique de forcer la mise au point, par ex. un jeu Flash où c'est la seule chose sur la page HTML.

Habituellement, la meilleure chose à faire est d'avoir un écran de menu de démarrage avec un bouton "play". Cela force l'utilisateur à cliquer sur le fichier SWF sans même être au courant de ce "problème de mise au point".

Il y a plus d'informations sur le Adobe Technote - Giving keyboard focus to an embedded Flash movie.

*** EDIT **** La mise au point ou non du Flash affecte uniquement les événements du clavier. Cela n'affectera pas le code en cours d'exécution, les clips vidéo en cours de lecture ou les sons/vidéos en cours de lecture.

0

En réponse à votre commentaire ... Je ne suis pas clair sur quelque chose. Si vous devez cliquer pour démarrer la chanson, alors vous avez déjà cliqué sur le fichier SWF et vous devriez obtenir des événements clavier, n'est-ce pas? Donc, si vous devez cliquer pour commencer puis cliquez sur à nouveau, peut-être vous devez vous assurer que votre écouteur de la souris est à la racine de votre liste d'affichage. Ou peut-être avez-vous besoin d'interroger la saisie lors d'une boucle EnterFrame plutôt que d'écouter les événements clés.

+0

les quatre suivants sont tous dans le constructeur. home_btn.addEventListener (MouseEvent.CLICK, home); menu_btn.addEventListener (MouseEvent.CLICK, le menu, \t \t \t \t stage.addEventListener (KeyboardEvent.KEY_UP, onKeyUp); stage.addEventListener (KeyboardEvent.KEY_DOWN, onKeyDown); donc je ne suis pas sûr de ce qui le cause Vous cliquez déjà une fois pour accéder au menu, puis vous cliquez à nouveau sur l'un des 5 boutons Très apprécié! – May

+0

ps Désolé pour le format, aucune idée de comment le réparer. – May

0

Je sais ce que vous voulez dire.Vous avez un objet spécifique sur la scène qui doit être mis au point avant que les événements du clavier ne se déclenchent. J'ai les mêmes problèmes avec un jeu ici. Un sprite doit se déplacer avec les flèches du clavier, mais le conteneur doit être mis au point pour qu'il réponde. Je ne fais que définir l'objet que je veux déplacer pour être tabEnabled car mes exigences ne sont que pour des raisons d'accessibilité. Donc tabuler sur l'objet d'abord lui donnera le contrôle du clavier.