2009-08-09 8 views
1

Je suis simplement en train de jouer avec ActionScript 3 de base en utilisant Flash CS3 Pro.ActionScript 3 Liaison à une classe MovieClip

j'ai mis dans une image clé ce code très simple à dupliquer n symboles "Brander":

for (var i:Number=0; i<20; i++) { 
    var m = new brander("MS_"+i); 
    addChild(m); 
    m.name = "MS_"+i; 
    m.x = 20*i; 
    m.alpha = a; 
    a-=0.05; 
    m.y = 20; 
} 

Le symbole est lié à brander.as classe.

La classe est celle-ci:

package { 
    import flash.display.*; 
    public class brander extends MovieClip { 
     var n:String; 
     // 
     public function brander(name) { 
      setName(name); 
     } 
     // 
     function setName(name) { 
      this.n = name; 
     } 
     // 
     function getName() { 
      return n; 
     } 
    } 
} 

et il est tout aussi simple.

Maintenant: J'ai remarqué que je ne peux pas vraiment définir quoi que ce soit dans cette classe. Donc, quand j'appelle setName (à la création d'une instance "brander"), je ne mets rien. Est-ce possible?

J'ai testé sans débogage, en écrivant:

btn.addEventListener(MouseEvent.MOUSE_DOWN, test); 
// 
function test(EVT) { 
    trace(this.getChildByName("MS_2").getName()); 
} 

Pourquoi lien pouvons-nous une classe lorsque cette classe ne peut pas stocker des informations? Qu'est-ce que je fais mal?


EDIT:

Je trouve cela fonctionne:

function fun(EVT) { 
    trace((this.getChildByName("M_2") as brander).getName()); 
} 

mais je ne peux pas comprendre pourquoi: pourriez-vous s'il vous plaît me dire pourquoi?

Répondre

1

La raison est que la fonction getChildByName() renvoie un objet DisplayObject. Le DisplayObject n'a pas de fonction getName. La classe brander hérite cependant de (extends) le DisplayObject, et vous pouvez donc le stocker sous forme d'objet DisplayObject. Mais si vous voulez appeler l'une des fonctions de brander, vous devez d'abord lancer la fonction brander.

Il ya beaucoup d'informations sur casting, polymorphism et inheritance plusieurs endroits sur Internet.

+0

Je sais ce que le casting, etc., est en termes de POO. En tant que développeur chevronné AS1 et AS2 (passant lentement et paresseusement à AS3), je pensais que c'était un problème de création Flash, et non un problème de programmation. Merci de prendre le temps de répondre. –

Questions connexes