2010-11-04 7 views
1

Je suis nouveau dans le développement ActionScript et j'utilise l'IDE FlashDevelop. J'ai joué avec des choses vraiment simplistes et j'ai rencontré un problème que je n'arrive pas à résoudre. Mon application compile et s'exécute, et une fonction qui surveille les événements de clic se déclenche parfaitement et je peux voir l'événement dans la console quand je le passe à trace(), mais le même code qui surveille KeyboardEvent ne se déclenche pas du tout.ActionScript 3 KeyboardEvent ne se déclenche pas

Voici mon code:

package GameTesting 
{ 

    import flash.display.Bitmap; 
    import flash.display.BitmapData; 
    import flash.display.Sprite; 

    import flash.events.Event; 
    import flash.events.MouseEvent; 
    import flash.events.KeyboardEvent; 

    [Frame(factoryClass="GameTesting.Preloader")] 
    public class Main extends Sprite 
    { 

     public function Main():void 
     { 
      if (stage) { 
       init(); 
      } else { 
       addEventListener(Event.ADDED_TO_STAGE, init); 
      } 
     } 

     private function init(e:Event = null):void 
     { 
      removeEventListener(Event.ADDED_TO_STAGE,init); 

      addEventListener(MouseEvent.CLICK, onClickEvent); 
      addEventListener(KeyboardEvent.KEY_DOWN, onKeyDownEvent); 
     } 

     private function onKeyDownEvent(e:KeyboardEvent):void 
     { 
      trace(e); 
     } 

     private function onClickEvent(e:MouseEvent):void 
     { 
      trace(e); 
     } 

    } 

} 

La trace MouseEvent() se déclenche à chaque fois comme prévu, mais KeyboardEvent ne se déclenche jamais, peu importe ce que je touche la presse. Des idées?

Répondre

6

Vous devez ajouter les auditeurs à la scène:

private function init(e:Event = null):void 
{ 
    removeEventListener(Event.ADDED_TO_STAGE,init); 

    stage.addEventListener(MouseEvent.CLICK, onClickEvent); 
    stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDownEvent); 
} 
+0

j'avais qu'à l'origine, et cela n'a pas fonctionné. Comme je ne savais pas vraiment quel était l'objet de la scène, je l'ai sorti et comme l'événement CLICK continuait à fonctionner, j'ai supposé qu'il était similaire à l'objet de fenêtre de niveau supérieur dans les navigateurs. Quoi qu'il en soit, même avec stage.addEventListener(), il ne fonctionne toujours pas, même si, curieusement, l'événement CLICK continue de fonctionner. Je suis si confus. :/ –

+0

Eh bien, je ne sais pas ce qui s'est passé, mais quand j'ai compilé mon code aujourd'hui, cela a fonctionné. Même si je jure devant Dieu que je n'ai rien changé. Peut-être que FlashDevelop est un IDE buggé? Qui sait. De toute façon, maintenant que cela fonctionne, j'ai été capable de vérifier que l'appel de addEventListener sur l'objet stage est requis pour KeyboardEvents, mais pas pour MouseEvents. Je ne sais pas pourquoi, mais bon à savoir quand même. Merci de votre aide. –

1

Si vous êtes dans l'IDE Flash (pour CS4 au moins) vous aurez également besoin de désactiver les raccourcis clavier lorsque vous debug (Ctrl + Maj + Entrée) ou tester (Ctrl + Entrée) le fla.

Dans la fenêtre de film, sélectionnez 'Contrôle' -> 'Désactiver les raccourcis clavier'. Cela empêchera l'IDE Flash de recevoir l'entrée au clavier et autorisera la fenêtre de débogage/test à la place.

3

Vous devrez peut-être vous assurer que le MovieClip écoutant l'événement a le focus. Si vous avez une sorte de menu ou un écran de démarrage pour votre jeu que vous cliquez sur un bouton pour démarrer, ce MovieClip peut conserver le focus même s'il a été retiré de la scène.

Voici un bon article expliquant ce plus en détail: Keyboard events on stage are not working...?

Questions connexes