2013-09-25 3 views
0

RemarqueCet doit être fait dans ActionScript 2 en raison de mon lecteur public restreint au flash player 8.flash AS2 bouton obtenir une action dynamique en classe MovieClip

Je suis en train de construire une classe simple qui étend la base Classe Movieclip. J'applique ensuite cette classe à un MovieClip de la bibliothèque en utilisant le panneau des propriétés et en lui donnant le nom de la classe. Cela fonctionne très bien, et je suis capable d'utiliser ma classe et mes méthodes etc. sur cet objet après avoir attaché le MovieClip à la scène en utilisant attachMovie. Ce que je n'arrive pas à faire, c'est le bouton que j'ai dans le MovieClip. A l'origine j'avais un bouton mis en place dans la bibliothèque movieclip, mais je ne peux pas sembler cibler cela dans ma classe. Ce que je voudrais faire est simplement de mettre en place un simple type de chose getURL dans le bouton, mais cela ne semble pas fonctionner.

J'ai essayé d'assigner le gestionnaire onMouseDown dans la classe plutôt qu'un bouton, et cela a fonctionné, mais c'est arrivé partout où j'ai cliqué sur la scène plutôt que juste au-dessus de la zone graphique. Cela a eu pour effet de déclencher tous les autres manipulateurs sur toutes les autres instances de la classe que j'avais sur la scène, de sorte qu'ils se déclenchent tous en même temps. Cependant, l'utilisation de onRollOver et onRollOut a fonctionné comme prévu.

J'ai également essayé de mettre en place un autre bouton dans la bibliothèque et d'utiliser this.attachMovie avec ma classe pour l'attacher, mais je n'arrive toujours pas à obtenir un handle pour cela.

J'ai créé un script de test très simple pour essayer d'illustrer ce que je suis en train de faire: -

class Test extends MovieClip { 

    public function Test() { 
     // constructor code 
     this.attachMovie("theButton" , "myButton" , _root.getNextHighestDepth()) 
     this.myButton.onMouseDown = clickMe; 
     this._x = Math.random() * 800; 
     this._y = Math.random() * 400; 
    } 


    public function clickMe() { 
     trace("I have been clicked"+this._name); 
    } 

} 

Ainsi, la question est, comment puis-je joindre (ou ont présent dans le MovieClip) un bouton, que je peux fournir un gestionnaire de type onMouseDown ou onMouseUp pour ce bouton qui ne fonctionnera que si je clique sur le bouton actuel? Qu'est-ce que je fais mal ici ... J'ai essayé plein d'idées différentes, mais rien ne semble fonctionner. Rappelez-vous c'est AS2 pas AS3. Merci.

+1

il a été un certain temps pour AS2, mais avez-vous essayé 'this.myButton.onRelease = Clickme;'? et vous n'avez aucun clic sur les instances de 'Test', n'est-ce pas? (note de côté: utilisez this.getNextHighestDepth(), pas _root, obtenez la profondeur suivante de ce que vous attachez à) – zamnuts

+0

la ligne this.myButton.onMouseDown me donne une erreur disant qu'il n'y a pas de propriété avec le nom 'myButton'.Je comprends pourquoi c'est ce que je dis, mais je n'arrive pas à comprendre comment fonctionne attachMovie dans une classe et comment j'obtiens une propriété que je peux cibler et utiliser. –

+0

Merci Zamnuts ... il semblerait que l'utilisation de this.onRelease fasse la différence si j'utilise un bouton qui existe dans mon MovieClip (avec la classe on) dans la bibliothèque et que j'utilise plutôt onRelease au niveau de la classe que d'essayer de l'attacher au bouton. Je trouve cela un peu étrange mais au moins cela semble fonctionner. –

Répondre

1

Trois points:

  1. Rappelez-vous, attachMovie renvoie une référence à la nouvelle attachée movieclip; utilisez ceci à votre avantage.

  2. En outre, onRelease est le moyen privilégié, il est le plus associé à un clic, voir ce post SO « What is the difference between the onMouseUp/Down and onPress/Release events in Flash? ».

  3. Enfin, lors de l'obtention de la prochaine profondeur la plus élevée (avec getNextHighestDepth), rappelez-vous chaque MovieClip a son propre système profondeur (même si, à l'intérieur il y a un seul monde), de sorte que trouve toujours la profondeur par rapport à la MC que vous attachez aussi. Puisque attachMovie est appelé this, alors getNextHighestDepth doit être appelé this.

code mis à jour:

class Test extends MovieClip { 
    public function Test() { 
     var btn = this.attachMovie("theButton" , "myButton" , this.getNextHighestDepth()); 
     // "bnt" is now the button instance, while "this" is still the Test mc 
     btn.onRelease = btn.onReleaseOutside = this.clickMe; // i roped in onReleaseOutside, but this might not be necessary 
     this._x = Math.random() * 800; 
     this._y = Math.random() * 400; 
    } 
    public function clickMe() { 
     trace("I have been clicked"+this._name); 
    } 
} 
+0

Merci Zamnuts ... Je n'avais pas réalisé le attachMovie avait une valeur de retour. –

Questions connexes