2009-08-09 5 views
1

Ich spiele einfach mit ActionScript 3 mit Flash CS3 Pro.ActionScript 3 MovieClip-Klassenverknüpfung

ich in einem Keyframe setzen diesen sehr einfachen Code n "Brander" Symbole zu duplizieren:

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; 
} 

Das Symbol verknüpft ist brander.as Klasse.

Die Klasse ist diese:

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; 
     } 
    } 
} 

und es ist zu einfach.

Jetzt: Ich habe bemerkt, dass ich in dieser Klasse nichts wirklich einstellen kann. Also, wenn ich setName (bei der Erstellung einer "brander" -Instanz) anrufe, setze ich nichts. Ist das möglich?

ich ohne Debuggen getestet, indem man einfach schreiben:

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

Warum verknüpfen wir eine Klasse, wenn diese Klasse Informationen nicht speichern kann? Was mache ich falsch?


EDIT:

fand ich dies funktioniert:

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

aber ich kann nicht verstehen, warum: Können Sie mir bitte sagen, warum?

Antwort

1

Der Grund ist, dass die Funktion getChildByName() ein DisplayObject zurückgibt. Das DisplayObject hat keine Funktion getName. Die Branding-Klasse erbt jedoch von dem DisplayObject (erweitert es) und kann daher als DisplayObject gespeichert werden. Wenn Sie jedoch eine der brander-Funktionen aufrufen möchten, müssen Sie sie zuerst an brander übergeben, indem Sie as verwenden.

Es gibt viele Informationen über casting, polymorphism und inheritance mehrere Stellen im Internet.

+0

Ich weiß, was Casting, etc. sind in Bezug auf OOP. Als erfahrener AS1- und AS2-Entwickler (langsam und träge zu AS3 wechselnd) dachte ich, dass es sich um ein Flash-Authoring-Problem handelt, nicht um ein Programmierproblem. Danke, dass Sie sich die Zeit genommen haben, zu antworten. –