Examen approfondi de la structure d'événements ActionScript 3.0

Dans ce didacticiel, je vais vous expliquer le cadre d'événements ActionScript 3.0. Après ce tutoriel, vous devriez avoir une idée claire du fonctionnement des événements, des répartiteurs et des écouteurs d’événements..

Qu'allez-vous apprendre??

Comme le cadre d’événement AS3 est énorme, nous examinerons toutes les choses qui le composent. Nous allons en apprendre davantage sur les points suivants:

  • Événements
  • Distributeurs d'événements
  • Auditeurs d'événements
  • Flux d'événements
  • Événements souvent utilisés
  • Et quelques trucs et astuces

Étape 1: La structure d'événement simplifiée

Je pense vraiment que vous auriez du mal à comprendre le cadre de l’événement si nous passons directement au jargon technique. C’est pourquoi je vais tout d’abord décrire une situation réelle. La situation dans son ensemble est une métaphore du cadre de l'événement. Ok, alors on y va:

Je suis un lecteur assidu de Arts informatiques et j'attends chaque jour le nouveau numéro. Quand je reçois le problème, je commence à le lire.

Étape 2: analyse de la métaphore du cadre d'événement

Bon, il y a plusieurs choses qui se passent:

  • Je reçois le nouveau numéro. Cette réception d’un numéro est un un événement.
  • Cet événement se passe quelque part, il m’arrive à moi, je suis le EventDispatcher.
  • J'attends que le nouveau numéro arrive. Je suis un objet et j'attends que cet événement se produise. Je suis un objet qui est écoute pour que l'événement se produise. Je suis un objet avec un écouteur d'événement ajouté à moi. Cet écouteur d'écoute écoute un événement spécifique (à savoir recevoir un nouveau numéro)..
  • Quand je reçois le problème, je commence à le lire. Quand l'événement est arrivé, je fais quelque chose, j'exécute une fonction. Je gère l'événement. La fonction que je fais s'appelle la gestionnaire et / ou le fonction auditeur.

Étape 3: Jargon technique - Événement

J'ai mentionné plusieurs choses:

  • un événement
  • EventDispatcher
  • Écouteur d'événement
  • fonction de gestionnaire / écouteur

Un événement est un objet qui décrit une occurrence, dans Étape 1 l'événement est l'arrivée d'un nouveau numéro.

La plupart du temps, vous verrez un événement écrit dans une structure similaire à celle-ci:

 MouseEvent.CLICK

Cet extrait de code comprend deux choses:

  • MouseEvent c'est la classe qui contient un ou plusieurs événements. Ceci est toujours écrit dans CamelCase.
  • CLIQUEZ SUR c'est le type d'événement. Ceci est toujours écrit en majuscule.

Le type d'événement est en fait une chaîne de constante statique. Cela peut paraître étrange, mais un événement n'est rien d'autre qu'une chaîne. Essayez d'exécuter cet extrait.

 trace (MouseEvent.MOUSE_MOVE);

Vous aurez comme sortie mouseMove. Nous venons de suivre la constante MOUSE_MOVE, qui fait partie de la classe MouseEvent. Un événement est une chaîne! Mais cette chaîne représente l'occurrence de (dans cet exemple) le mouvement de la souris.

Étape 4: Jargon technique - EventDispatcher

Un événement se passe toujours quelque part. Où l'événement se produit est l'endroit où il est renvoyé (expédié). Les racines des événements de répartition se trouvent dans la classe EventDispatcher. Rendez-vous compte que l'endroit où l'événement est envoyé est l'endroit où il se produit. Donc si clip vidéo A envoie un événement, puis un écouteur d'événements (les écouteurs d'événements seront expliqués à l'étape 5) ajouté à clip vidéo B ne recevrait pas cet événement.

Pour faciliter les choses, tous les objets d'affichage ont la fonction intégrée dispatchEvent (événement: événement), juste comme beaucoup d'autres classes.

 var myMC: MovieClip = new MovieClip (); myMC.dispatchEvent (new Event (MouseEvent.CLICK));

Mais la plupart du temps, les événements ne sont pas envoyés manuellement, la plupart du temps, ils sont automatiquement envoyés. Par exemple, si je clique sur le clip A, l'événement MouseEvent.CLICK sera automatiquement envoyé..

Étape 5: Jargon technique - Auditeur d'événement

Lorsqu'un événement donné se produit, nous, développeurs Flash, souhaitons faire quelque chose pour répondre à cet événement. Les auditeurs d'événements sont ce dont vous avez besoin. Les auditeurs d'événements n'ont pas leur propre classe, non, ils sont un peu différents. Les écouteurs d'événement sont ajoutés à un objet. Les écouteurs d'événement sont des objets qui "écoutent" un certain événement. Lorsque cet événement se produit, une fonction sera appelée, un gestionnaire (fonction).

Regardez l'image ci-dessous, montrant la syntaxe derrière la fonction addEventListener (), qui est utilisé pour ajouter un écouteur d'événement:

En fait, ce ne sont pas tous les paramètres acceptés par la méthode addEventListener, il en reste trois que je n'ai pas mentionnés. Vous ne les utiliserez presque jamais, en particulier lorsque vous venez de commencer à utiliser des écouteurs d'événement. Regardons à nouveau la structure de la méthode addEventListener.

 addEventListener (type: String, auditeur: Function, useCapture: Boolean = false, priorité: int = 0, useWeakReference: Boolean = false): void

Discutons donc des 3 derniers paramètres:

  • useCapture: Lorsque ce paramètre est défini sur true, nous écoutons l'événement en phase de capture. Par défaut, ce paramètre est défini sur false, nous écoutons donc l'événement dans les phases cible et bulle. Nous allons discuter du flux d'événements en Étape 10.
  • priorité: Même s'il semble que tous les écouteurs d'événements travaillent simultanément, ils ne le font pas. Parfois, ils peuvent entrer en conflit les uns avec les autres. Cela permet de s'assurer qu'un écouteur d'événement donné a une priorité plus élevée qu'un écouteur d'événement différent.
  • useWeakReference: Lorsque ce paramètre est défini sur true, il crée un lien faible entre l'écouteur d'objet et d'événement. Qu'est-ce que cela signifie? Normalement, les objets sont récupérés s'il n'y a pas de référence. Lorsque l'objet est supprimé et qu'un écouteur d'événement est ajouté, il existera toujours s'il est référencé ailleurs. Cela arrive avec références de mémoire fortes. Avec références de mémoire faibles l'écouteur d'événements est supprimé lorsque l'objet auquel il a été ajouté est supprimé. Personnellement, j'ai défini ce paramètre sur true (j'utilise donc des références mémoire faibles).

Supprimer un écouteur d'événement est aussi simple que d'en ajouter un.

 // ceci ajoute un écouteur d'événement à la scène stage.addEventListener (MouseEvent.CLICK, clickHandler); // ceci supprime l'écouteur d'événements ajouté à la scène stage.removeEventListener (MouseEvent.CLICK, clickHandler);

Étape 6: Fonction de gestionnaire / écouteur

Lorsque l'événement qu'un écouteur d'événements est à l'écoute se produit, il appelle une fonction. Cette fonction s'appelle le gestionnaire ou la fonction auditeur. Regardez l'image ci-dessous, montrant la syntaxe du gestionnaire:

Notez l'argument dans le gestionnaire, cet argument est obligatoire. La fonction d'écoute n'a qu'un seul argument et n'est pas autorisée à en avoir plus. Cet événement contient des informations sur l'événement, nous en parlerons dans étape 9.

Étape 7: Ajout d'un écouteur d'événement et d'un gestionnaire

Maintenant, nous voulons que myMC réponde à l'événement envoyé. Nous allons donc ajouter un événement et ensuite la fonction de gestionnaire. Notre code ressemblera à ceci:

 // crée notre clip myMC var myMC: MovieClip = new MovieClip (); // laisse myMC envoyer l'événement MouseEvent.CLICK myMC.dispatchEvent (new Event (MouseEvent.CLICK)); // ajouter un écouteur d'événement à myMC, écoutant l'événement MouseEvent.CLICK et appelant clickHandler myMC.addEventListener (MouseEvent.CLICK, clickHandler); // définit la fonction du gestionnaire function clickHandler (event: Event) trace ("Ive entendu l'événement MouseEvent.CLICK"); 

Ensuite, testez votre film (Windows: Ctrl + Entrée, Mac: Cmd + Entrée).

Avez-vous eu une sortie? Non? Eh bien, moi non plus. Nous allons examiner ce qui ne va pas à l'étape suivante..

Étape 8: Ordre des codes

Alors qu'est-ce qui ne va pas? Eh bien, cela ne peut pas être une erreur de syntaxe, du moins je suis ne rien obtenir. Non, ce n'est techniquement même pas une erreur. Regardez le code à nouveau, mais cette fois rappelez-vous que le code sera exécuté ligne par ligne:

 // crée notre clip myMC var myMC: MovieClip = new MovieClip (); // laisse myMC envoyer l'événement MouseEvent.CLICK myMC.dispatchEvent (new Event (MouseEvent.CLICK)); // ajouter un écouteur d'événement à myMC, écoutant l'événement MouseEvent.CLICK et appelant clickHandler myMC.addEventListener (MouseEvent.CLICK, clickHandler); // définit la fonction du gestionnaire function clickHandler (event: Event) trace ("Ive entendu l'événement MouseEvent.CLICK"); 

J'espère que vous avez compris ce qui n'allait pas: l'événement est envoyé avant qu'un écouteur d'événements ne soit ajouté à myMC. Ainsi, lorsque l'écouteur d'événement a été ajouté, il est trop tard, l'événement est arrivé. Heureusement, il est facile à résoudre, il suffit de modifier l'ordre et d'ajouter tout d'abord l'écouteur d'événement, puis d'envoyer l'événement par la suite:

 // crée notre clip myMC var myMC: MovieClip = new MovieClip (); // ajouter un écouteur d'événement à myMC, écoutant l'événement MouseEvent.CLICK et appelant clickHandler myMC.addEventListener (MouseEvent.CLICK, clickHandler); // laisse myMC envoyer l'événement MouseEvent.CLICK myMC.dispatchEvent (new Event (MouseEvent.CLICK)); // définit la fonction du gestionnaire function clickHandler (event: Event) trace ("Ive entendu l'événement MouseEvent.CLICK"); 

Alors pourquoi avons-nous fait tout cela? Eh bien, vous rencontrerez probablement ce problème et il faudra peut-être un certain temps pour comprendre ce qui se passe. Il vaut mieux vous montrer le problème et vous apprendre à le résoudre..

Étape 9: l'argument de l'événement

Chaque fonction de gestionnaire a un argument. l'argument de l'événement. Cet argument contient des données sur l'événement et le répartiteur d'événements. Le paramètre contient des propriétés que nous aimerions lire. Voici une liste de certains des plus couramment utilisés:

  • cible: Ceci retourne l'objet cible et donc le répartiteur d'événements de l'événement.
  • currentTarget: Cela renvoie l'objet actuellement ciblé dans le flux d'événements, nous allons parler du flux d'événements dans Étape 10.
  • type: Cela retournera la chaîne d'événement. La valeur est toujours écrite dans camelCase. Donc, MOUSE_DOWN a la valeur mouseDown.

Avec cela, nous pouvons utiliser le même gestionnaire pour différents types d'événements. Comment? Eh bien, nous en discuterons dans la prochaine étape.

Étape 10: Plusieurs événements, une fonction d'écoute

D'accord, examinons d'abord cet extrait de code:

 stage.addEventListener (MouseEvent.MOUSE_DOWN, downHandler); stage.addEventListener (MouseEvent.MOUSE_UP, upHandler); function downHandler (event: MouseEvent) trace ("Down");  function upHandler (event: MouseEvent) trace ("Up"); 

Nous utilisons deux événements, à savoir MouseEvent.MOUSE_DOWN et MouseEvent.MOUSE_UP. Le premier événement est l'événement lorsque la souris appuie sur le bouton principal de la souris et le maintient enfoncé. vers le bas. Lorsque la personne relâche ce bouton, l'événement MouseEvent.MOUSE_UP se produit. Le bouton de la souris va en haut après l'avoir relâché.

Maintenant, nous pouvons utiliser au lieu de deux gestionnaires (à savoir gestionnaire et upHandler) juste un gestionnaire. Supprimez le code que nous avons écrit et tapez ce qui suit:

 stage.addEventListener (MouseEvent.MOUSE_DOWN, gestionnaire); stage.addEventListener (MouseEvent.MOUSE_UP, gestionnaire); fonction handler (event: MouseEvent) trace ("Quelque chose est arrivé…"); 

OK, nous avons configuré notre gestionnaire et cela fonctionne, mais nous souhaitons que notre gestionnaire fasse quelque chose de spécifique, en fonction de l'événement qui est transmis au gestionnaire. Heureusement, nous pouvons utiliser type d'événement. Utilisons-le!

 stage.addEventListener (MouseEvent.MOUSE_DOWN, gestionnaire); stage.addEventListener (MouseEvent.MOUSE_UP, gestionnaire); gestionnaire de fonctions (event: MouseEvent) if (event.type == "mouseDown") trace ("Down");  else trace ("Up"); 

Étape 11: déroulement de l'événement

Maintenant, disons qu'un clic se produit sur un MovieClip, appelons cela mcA. L'événement n'est pas simplement envoyé à mcA, non, l'événement passe par tout le joueur. Ce voyage s'appelle le flux d'événements, il suffit de penser à la façon dont l'événement se déroule à travers le joueur.

L’événement commence au plus haut niveau, au étape, ensuite, il passera par le Parents de mcA, jusqu'à ce que l'événement atteigne mcA. Ensuite, l'événement "rebondira" de mcA, sur la scène.

Ok, cool, mais que puis-je utiliser pour ça? Parce que nous savons maintenant qu’un événement traverse tous les parents du répartiteur, nous pouvons utiliser simplement un écouteur d'événements, pour suivre les événements de plusieurs objets.

Étape 12: Plusieurs objets, un écouteur d'événement

Bon, créons plusieurs clips vidéo les uns dans les autres. Vous pouvez le faire vous-même ou simplement utiliser le fichier step-11.fla fourni.

Nous allons créer 3 clips et leur donner les noms d'occurrence RedMC, blueMC et greenMC. Ensuite, placez tout cela dans un plus grand MovieClip, nommé récipient.

Commençons maintenant à écrire du code. J'ai déjà créé une couche nommée actes, alors écrivez votre code sur cette couche. Ajoutons d'abord un écouteur d'événement à récipient, écouter l'événement MouseEvent.CLICK, avec le gestionnaire nommé clickHandler.

 conteneur.addEventListener (MouseEvent.CLICK, clickHandler); function clickHandler (event: MouseEvent) // corps de la fonction

Nous voulons savoir quel bouton est cliqué, alors pourquoi avons-nous ajouté un écouteur d'événement à un conteneur? Eh bien, regardez l'image ci-dessous:

Comme vous le voyez, l’événement est en cours d’expédition au redMC, mais il sera bulle retour au conteneur. Ensuite, l'écouteur d'événements ajouté au conteneur entendra l'événement et appellera la fonction d'écoute clickHandler. La même chose arrive avec blueMC et greenMC.

Nous allons maintenant utiliser event.target, car event.target est le répartiteur d'événements, et le répartiteur d'événements est redMC. Alors, comment pouvons-nous utiliser event.target? Nous pouvons vérifier event.target.name, qui renvoie le nom de l'instance sous forme de chaîne. Nous pouvons donc utiliser la normale si déclarations:

 conteneur.addEventListener (MouseEvent.CLICK, clickHandler); function clickHandler (event: MouseEvent) if (event.target.name == "redMC") trace ("Red");  if (event.target.name == "blueMC") trace ("Blue");  if (event.target.name == "greenMC") trace ("Green"); 

Étape 13: Événements souvent utilisés

Vous avez maintenant une bonne compréhension du cadre de l’événement. Cependant, pour réaliser quelque chose, l’essentiel est de savoir quel événement utiliser. Le Manuel de référence du langage et des composants ActionScript 3.0 est un excellent endroit pour vérifier quels événements existent. Cliquez simplement sur un événement contenant une classe, comme MouseEvent, et regardez en quoi consiste chaque événement..

Étape 14: MouseEvent.MOUSE_MOVE

Cet événement se produit lorsque l'utilisateur déplace la souris. Si vous ajoutez un écouteur d'événement écoutant cet événement, par exemple sur un MovieClip nommé myMC, vous saurez que la souris passe sur myMC..

 myMC.addEventListener (MouseEvent.MOUSE_MOVE, mouseMoveHandler); function mouseMoveHandler (event: MouseEvent) trace ("Votre souris se déplace sur myMC"); 

Étape 15: MouseEvent.MOUSE_OVER

Cet événement se produit lorsque l'utilisateur passe au-dessus (survole). Cet événement ne se produit que lorsque l'utilisateur déplace le curseur ailleurs sur l'objet. Déplacer la souris sur l'objet n'est alors plus l'événement MouseEvent.MOUSE_OVER, mais l'événement MouseEvent.MOUSE_MOVE.

 myMC.addEventListener (MouseEvent.MOUSE_OVER, overHandler); fonction overHandler (event: MouseEvent) trace ("Vous venez de déplacer la souris sur myMC"); 

Étape 16: MouseEvent.MOUSE_OUT

Cet événement est précisément l'opposé de MouseEvent.MOUSE_OVER. C'est à ce moment que le curseur de l'utilisateur se déplace hors de l'objet, ou comme ils l'appellent (les gars qui ont créé AS3), hors de l'objet.

 myMC.addEventListener (MouseEvent.MOUSE_OUT, outHandler); function outHandler (event: MouseEvent) trace ("Vous venez de déplacer la souris sur myMC"); 

Étape 17: MouseEvent.MOUSE_DOWN

Cet événement se produit lorsque l'utilisateur appuie sur la souris principale pendant qu'elle est maintenue enfoncée..

 myMC.addEventListener (MouseEvent.MOUSE_DOWN, downHandler); function downHandler (event: MouseEvent) trace ("Le bouton principal de la souris est enfoncé sur myMC"); 

Étape 18: MouseEvent.MOUSE_UP

Cet événement est précisément l'opposé de MouseEvent.MOUSE_DOWN. Lorsque l'utilisateur relâche le bouton principal de la souris, l'événement MouseEvent.MOUSE_UP se produit..

 myMC.addEventListener (MouseEvent.MOUSE_UP, upHandler); function upHandler (event: MouseEvent) trace ("Le bouton principal de la souris a été relâché alors qu'il survolait myMC"); 

Étape 19: MouseEvent.CLICK

Eh bien, le nom indique déjà très clairement quand cet événement se produit. Cet événement se produit lorsque l'utilisateur clique (avec le bouton principal de la souris).

 myMC.addEventListener (MouseEvent.CLICK, clickHandler); function clickHandler (event: MouseEvent) trace ("Vous venez de cliquer sur myMC"); 

Étape 20: MouseEvent.DOUBLE_CLICK

Cet événement se produit lorsque l'utilisateur clique deux fois (avec le bouton principal de la souris). Notez que lorsque MouseEvent.DOUBLE_CLICK se produit, MouseEvent.CLICK se produit pour la deuxième fois..

 myMC.addEventListener (MouseEvent.DOUBLE_CLICK, doubleClickHandler); function doubleClickHandler (event: MouseEvent) trace ("Vous venez de double-cliquer sur myMC"); 

Si vous testez votre film et double-cliquez, rien ne se passera. Pourquoi? Par défaut, les clips (et presque tous les objets d'affichage) ont la propriété doubleClickEnabled définie sur false. Donc MouseEvent.DOUBLE_CLICK ne sera pas envoyé. Il suffit de le définir sur true et tout fonctionnera correctement.

 myMC.addEventListener (MouseEvent.DOUBLE_CLICK, doubleClickHandler); function doubleClickHandler (event: MouseEvent) trace ("Vous venez de double-cliquer sur myMC");  myMC.doubleClickEnabled = true;

Étape 21: Event.ENTER_FRAME

Cet événement se produit chaque fois que l'objet entre dans une nouvelle image (oui, ça sonne un peu bizarre). En gros, cet événement se produit au même rythme que la fréquence d'images. Cela signifie que si votre film a une fréquence d'images par seconde de 30 images par seconde, l'événement est appelé 30 fois par seconde. Pour quoi utiliseriez-vous cet événement? Vous pouvez utiliser cet événement pour que les choses se passent progressivement. Par exemple, vous pouvez augmenter la coordonnée x d’un objet de 5, à la cadence de la cadence..

 myMC.addEventListener (Event.ENTER_FRAME, enterFrameHandler); fonction enterFrameHandler (event: Event) myMC.x + = 5; 

Étape 22: Event.COMPLETE

Cet événement se produit lorsque l'objet termine ce qu'il était en train de faire. La plupart du temps, vous l'utiliserez pour des choses qui doivent charger quelque chose ou pour des choses qui utilisent une forme de média. Un URLLoader charge une URLRequest. Une fois le chargement terminé, nous chargeons ces données dans un autre chargeur, puis nous l'ajoutons à la scène..

 var myURLRequest: URLRequest = new URLRequest ("http://farm3.static.flickr.com/2382/1616598266_bafebf0086_o.jpg"); var myURLLoader: URLLoader = new URLLoader (myURLRequest); myURLLoader.dataFormat = URLLoaderDataFormat.BINARY; myURLLoader.addEventListener (Event.COMPLETE, completeHandler); function completeHandler (event: Event) var loader: Loader = new Loader (); loader.loadBytes (myURLLoader.data); addChild (chargeur); 

Étape 23: Event.RESIZE

Cet événement se produit lorsque le lecteur flash ou la page contenant le flash est redimensionné. Vous pouvez utiliser cet événement pour repositionner des objets après le redimensionnement..

 stage.addEventListener (Event.RESIZE, resizeHandler); function resizeHandler (event: Event) trace ("Les dimensions de la scène sont" + stage.stageWidth + "x" + stage.stageHeight); 

Étape 24: KeyboardEvent.KEY_DOWN

Cet événement se produit lorsque tout la touche est enfoncée sur le clavier.

 stage.addEventListener (KeyboardEvent.KEY_DOWN, keyDownHandler); function keyDownHandler (event: KeyboardEvent) trace ("Vous venez d'appuyer sur une touche!"); 

Étape 25: KeyboardEvent.KEY_UP

Cet événement est précisément le contraire de KeyboardEvent.KEY_DOWN, il se produit lorsque tout la clé est relâchée (la clé monte).

 stage.addEventListener (KeyboardEvent.KEY_UP, keyUpHandler); function keyUpHandler (event: KeyboardEvent) trace ("Vous venez de relâcher une clé"); 

Étape 26: Utilisation des clés booléennes intégrées

Bien sûr, il est très inutile de répondre à n'importe quelle clé (sauf pour un écran de veille), nous aurions donc besoin de récupérer des informations sur la touche enfoncée. Heureusement, certaines des clés sont intégrées à la classe KeyboardEvent. Ce sont des booléens et sont définies sur true lorsqu’elles sont enfoncées. Ces booléens construits sont:

  • KeyboardEvent.altKey, défini sur true lorsque la touche alt est enfoncée.
  • KeyboardEvent.commandKey, défini sur true lorsque la touche de commande est enfoncée (AIR uniquement).
  • KeyboardEvent.controlKey, défini sur true lorsque la touche Ctrl (contrôle) est enfoncée (AIR uniquement)..
  • KeyboardEvent.ctrlKey, défini sur true lorsque la touche Ctrl (contrôle) est enfoncée sous Windows. Cependant, sur Mac, la touche Ctrl est vraie lorsque la touche cmd est enfoncée.
  • KeyboardEvent.shiftKey, défini sur true lorsque la touche Maj est enfoncée.

Alors maintenant, nous pouvons utiliser ceci pour indiquer plus précisément la touche sur laquelle vous devez appuyer avant de faire quelque chose..

 stage.addEventListener (KeyboardEvent.KEY_DOWN, keyDownHandler); function keyDownHandler (event: KeyboardEvent) if (event.shiftKey) trace ("Vous venez d'appuyer sur la touche majuscule"); 

Étape 27: Utilisation des codes de clé

Vous vous demandez peut-être, d'accord, qu'en est-il de toutes les autres clés? Eh bien il y a quelque chose appelé le code clé. Chaque clé a un certain nombre; un code de clé. Nous pouvons vérifier le code de la clé qui a déclenché l'événement. Ceci est fait avec event.keyCode, qui retourne un entier. Cliquez ici pour obtenir une liste des codes de clé. Même si c'est pour JavaScript, les codes de clé sont les mêmes.

 stage.addEventListener (KeyboardEvent.KEY_DOWN, keyDownHandler); function keyDownHandler (event: KeyboardEvent) if (event.keyCode == 65) trace ("Vous venez d'appuyer sur la touche A"); 

Maintenant, il est plus facile de stocker les codes de clé dans une variable (ou si vous êtes un hardcore, dans une classe) et d'utiliser simplement cette variable, au lieu du code de clé..

 var A: uint = 65; stage.addEventListener (KeyboardEvent.KEY_DOWN, keyDownHandler); function keyDownHandler (event: KeyboardEvent) if (event.keyCode == A) trace ("Vous venez d'appuyer sur la touche A"); 

Étape 28: Utilisation des codes de caractère

Avec les codes de clé, vous pouvez obtenir beaucoup de travail, mais ce n'est parfois pas ce dont vous avez besoin. Par exemple, la même clé est utilisée pour les caractères une et UNE. Mais nous voudrions toujours faire la différence entre les deux. Eh bien, l'événement porte le code de caractère du répartiteur d'événements.

 stage.addEventListener (KeyboardEvent.KEY_DOWN, keyDownHandler); fonction keyDownHandler (event: KeyboardEvent) trace (event.charCode); 

Bon, cela fonctionne, mais devons-nous alors nous souvenir de ces codes de caractères? Non. Heureusement, nous pouvons utiliser la fonction charCodeAt (), qui renvoie le code de caractère d'un caractère (sous forme de chaîne). charCodeAt () prend par défaut le premier caractère de la chaîne. charCodeAt (0) est le premier caractère, charCodeAt (1) le second, etc..

 stage.addEventListener (KeyboardEvent.KEY_DOWN, keyDownHandler); function keyDownHandler (event: KeyboardEvent) if (event.charCode == String ("a"). charCodeAt ()) trace ("Vous venez d'appuyer sur une touche minuscule"); 

Étape 29: mise au point

Maintenant, essayez de taper ce qui suit:

 myMC.addEventListener (KeyboardEvent.KEY_DOWN, keyDownHandler); function keyDownHandler (event: KeyboardEvent) trace ("Vous venez d'appuyer sur une touche alors que vous vous concentrez sur myMC"); 

Essayez de tester cela, cela ne fonctionnera pas! Pourquoi? Si myMC est un clip, il n'acceptera pas la saisie au clavier. Par conséquent, les événements de clavier ne seront pas distribués par clip. Si vous souhaitez que myMC réponde, ajoutez l'écouteur d'événements à la scène, puis demandez à myMC de faire quelque chose. Essayez de remplacer myMC d'un clip par un champ de texte dynamique, cela fonctionnera.

Qu'en est-il de deux champs de texte dynamiques? Si l'utilisateur tape, les deux champs de texte distribuent-ils un événement? Non, seulement celui que vous tapez. Cela s'appelle concentrer. Les événements de clavier sont distribués par l'objet qui a le focus. La scène est le seul objet qui a encore le focus, alors qu'un autre objet a aussi le focus.

Étape 30: TimerEvent.TIMER

Cet événement est spécialement conçu pour les minuteurs. Il est envoyé à une heure qui vient d’atteindre le délai. Cela signifie que vous pouvez utiliser cet événement pour faire quelque chose de manière très précise, à des intervalles de temps définis..

 var myTimer: Timer = new Timer (1000, 5); myTimer.start (); myTimer.addEventListener (TimerEvent.TIMER, timerHandler); function timerHandler (event: TimerEvent) trace ("une seconde plus tard ..."); 

Étape 31: TimerEvent.TIMER_COMPLETE

Tous les timers ont un second paramètre optionnel. Ce paramètre définit le nombre de répétitions du minuteur. Cela signifie que lorsque la minuterie aura atteint le délai, elle recommencera. Si le chronomètre s'est répété autant de fois que le nombre de répétitions, l'événement TimerEvent.TIMER_COMPLETE sera envoyé..

 var myTimer: Timer = new Timer (1000, 5); myTimer.start (); myTimer.addEventListener (TimerEvent.TIMER_COMPLETE, timerHandler); function timerHandler (event: TimerEvent) trace ("Le temporisateur s'est répété 5 fois"); 

Conclusion

C'était ça! J'espère que vous avez maintenant une compréhension approfondie de la structure d'événements d'ActionScript 3.0. Rendez-vous compte que les événements discutés ne sont pas tous les événements existants, je viens de discuter de ceux que j'utilise souvent. N'oubliez pas de toujours vérifier la langue et les références de composants, cela peut vous aider beaucoup! Ce fut un plaisir d'écrire pour vous les gars!