Quand "déclenché" une manifestation d'un contexte d'objet, qui est l'objet parent qui représente la portée de toutes les variables, devient l'objet lui-même. Cette caractéristique, typique de la programmation orientée objet, peut être désorientant erreurs provoquant et des bugs dans le code. En outre, dans certaines situations, peuvent empêcher l'accès à certaines variables «avant» disponibles.
Tout d'abord, nous voyons une fonction d'ActionScript liés à la gestion de contexte qui, s'il est inclus, nous permettra d'économiser quelques heures de tests inutiles. Lorsque nous avons à faire avec des graphismes ou une simple imbriqué dans le MovieClip, la propriété _parent résoudre les problèmes dans leur contexte. Par exemple, si l'padre_mc MovieClip Il contient un autre figlio_mc MovieClip et utiliser le code suivant:
1 2 3 4 5 | / / Code à l'intérieur padre_mc ( ) { figlio_mc. onRelease = function () { this ) ; // figlio_mc trace (this); / / figlio_mc this . _parent ) ; // padre_mc trace (this. _parent); / / padre_mc } |
Risalisre le «père», alors, est claire et immédiate.
Avec les classes ainsi, le code uniquement, ou l'extension de la propriété MovieClip _parent n'est pas disponible et pourrait compliquer les choses! Immaginiiamo d'avoir une classe MyClass :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | MovieClip { Classe MyClass étend MovieClip { function MaClasse () { / / Constructeur } / / myMethod function () { this ) ; // myClass trace (this); / / maClasse ; var num = 5; ; var cp = this; .... [ un oggetto ] ; var monObjet = new [un objet]; ( ) { monObjet. onLoad = function () { this ) ; // myObject trace (this); / / monObjet cp ) ; // myClass trace (CP), / / maClasse } } |
, ovvero il puntatore alla classe MyClass . Le contexte de MyMethod() est, bien sûr, this qui est le pointeur vers la classe MyClass . . La variable num , par exemple, a un cycle de vie enfermé dans la méthode MyMethod() . Il est donc visible que dans la méthode et seront détruits à la sortie. . Même chose pour la variable myObject initialise un événement qui, cependant, dans ce cas onLoad . lasciandoci, apparentemente, senza il puntatore alla classe madre myClass . Une fois déclenché onLoad() va devenir le contexte myObject laissant, apparemment, sans le pointeur vers la classe parente myClass . , ha lo stesso contesto della variabile myObject ! Un examen plus approfondi du code nous voyons que la variable cp , définie dans la méthode myMethod() , a le même contexte de la variable myObject ! dell'oggetto myObject in quanto condivide con esso lo stesso contesto. En fait la variable cp (pointeur de classe) sera visible dans la méthode onLoad objet myObject car elle partage le même contexte. ha necessità di “vivere” più al lungo del previsto visto che ha “allocato” un evento (di tutto questo se ne occupa Flash a nostra “insaputa”). En fait la méthode myMethod() n'est pas seulement parce que l'objet est désalloué myObject a la nécessité de «vivre» plus long que prévu car il a "affecté" d'un événement (tout cela est affaire avec Flash dans nos «connaissances»).
Conseils
Pour les événements associés à des boutons ou MovieClip serait une bonne habitude d'utiliser le formulaire:
1 2 3 4 5 | my_mc onRelease = myOnRelease.; Fonction myOnRelease () { this ) ; // _root trace (this) / / _root "Click me" ) ; trace ("Click me"); } |
Au lieu de la plus rapide et immédiate:
1 2 3 4 | ( ) { my_mc. onRelease = function () { this ) ; // my_mc trace (this); / / my_mc "Click me" ) ; trace ("Click me"); } |
L'avantage d'utiliser une fonction externe est d'avoir un cadre neutre et la possibilité d'accéder à la fonction quel que soit le MovieClip qu'il contrôle. Dans le second cas, par exemple, si vous vouliez forcer l'exécution du code lié à "cliquer" sur le MovieClip devrais-je utiliser un code comme ceci:
1 | ; . my_mc onRelease (); |
En pratique, j'ai appeler l'événement comme s'il s'agissait d'une méthode. Toutefois, j'ai - en fait - pour que le MovieClip my_mc . Une autre façon, cependant, je peux exécuter du code appelant directement myOnRelease() . Évidemment, comme le montrent les exemples, les yeux dans les contextes. . Dans le premier cas, le contexte de myOnRelease() est le parent de l'objet où il est écrit, par exemple, _root . Dans le second cas, cependant, le contexte est toujours le MovieClip my_mc !
Forcer un contexte différent
Nous concluons avec un trucs utiles dans de nombreuses circonstances. in grado di forzare un contesto di un metodo o funzione. Flash fournit une bibliothèque, mx.utils avec un objet Delegate peut forcer un contexte d'une méthode ou une fonction. Son utilisation est très simple:
1 2 3 4 5 6 7 8 | utils . Delegate ; .. à l'importation mx utils délégué; / / // puntatore ad un MovieClip my_mc var, / / pointeur sur un MovieClip // un bottone my_btn / var / un bouton myFunction function () { this ) ; trace (this); } create ( my_mc , myFunction ) ; my_btn onPress = Délégué créer (my_mc, maFonction)..; |
L'événement onPress my_btn les points bouton pour une "nouvelle" fonction créée précisément avec la my_mc contexte. Lorsque vous cliquez sur le bouton de my_btn, le code s'exécute dans myFunction() que le contexte sera my_mc!










Il n'y a aucun commentaire pour cet article
Laisser un commentaire