1

Ich erstelle eine MovieClip-Unterklasse (nennen wir sie MyClip), die ich für mehrere Bibliothekselemente verwenden möchte. Ich werde diese Movieclips aus ActionScript-Code instanziieren. MyClip verfügt über einen Konstruktorparameter, mit dem die Anfangswerte bestimmter Eigenschaften festgelegt werden können.Übergabe von Parametern an den Konstruktor für eine automatisch erstellte AS3-Assetklasse

Da ich es für mehrere Bibliothekselemente verwenden möchte, scheint die logische Vorgehensweise dies im Textfeld "Basiseigenschaften" im Dialogfeld "Symboleigenschaften" anzugeben. Das Problem ist, dass die automatisch generierten Unterklassen nicht den Konstruktor mit dem Parameter haben. Stattdessen versucht Flash, sie nur mit einem Standardkonstruktor zu generieren, was ebenfalls fehlschlägt, weil MyClip keinen Standardkonstruktor hat.

Gibt es einen Weg um dies zu umgehen, abgesehen davon, dass die Eigenschaftsinitialisierung auf eine normale Methode verschoben wird?

Edit: Ich war nicht klar genug, ich werde versuchen, hier zu klären. Ist dies der MyClip Klasse:

public class MyClip extends MovieClip 
{ 
    private var someValue : Number; 

    public function MyClip(someValue : Number) 
    { 
     this.someValue = someValue; 
    } 
} 

und ich angegeben MyClip als Basisklasse für Symbol MyClipA in der Bibliothek, ich würde im Idealfall in der Lage sein mag clip = new MyClipA(17); zu tun, ohne die MyClipA Klasse selbst zu schreiben.

+0

Haben Sie eine Lösung gefunden? –

+0

Nein. Es gibt wirklich keine Möglichkeit, dies zu tun. Wenn dies eine Situation ist, der Sie gegenüberstehen, dann ist Ihre beste Wette, die Initialisierung auf eine normale Methode zu verschieben oder Klassen neu zu strukturieren, wie zum Beispiel das unten vorgeschlagene Quoo. –

Antwort

1

Ich nehme an, der Grund, den Sie benötigen, um MyClipA und MYClipB usw. zu erstellen, ist das Anfügen verschiedener Objekte an Objekte, die nur das Verhalten eines MyClip-Objekts haben?

Vielleicht könnte man es anders angehen, Ihre Basisklasse machen - myClip, wie Sie es Ihrem Beispiel haben, 2 aruguments annehmen, von denen eine ein Verweis auf die Kunst ist:

public class MyClip extends MovieClip 
{ 
    public var art:ArtBaseClass 
    private var someValue : Number; 

    public function MyClip(someValue : Number, artClass:ArtBaseClass) 
    { 
     this.someValue = someValue; 
     this.art = new artClass(); 
     this.addChild(art); 
    } 
} 

Und man könnte definieren was auch immer Ansonsten benötigen Sie eine ArtBaseClass, die auf jedes dieser Kunstbibliotheksobjekte angewendet wird.

0

Versuchen Sie, Standardargumente für den Konstruktor anzugeben (null als Sonderwert, vielleicht?). Fügen Sie dann am Anfang des Konstruktors eine Fehlerüberprüfung hinzu, die sinnvolle Standardeinstellungen für Ihren MovieClip vorgibt. Es ist wirklich hacky, aber so weit ich weiß, gibt es keinen besseren Weg, es mit der Drag & Drop-Animation-UI zu machen (das geht nur über Code).

+0

Das würde funktionieren, wenn ich diesen Parameter nicht wirklich brauche. So wie die Dinge sind, muss ich wahrscheinlich die Klasse mit dem Standardkonstruktor verlassen und die "initialize" -Methode implementieren, um die Initialisierung nach dem Aufbau des Objekts durchzuführen. Was ist scheiße;) –

0

Wenn dies auch gelaufen ist. Der richtige Weg, um es zu lösen, ist das Erstellen von Klassen für MyClipA und MyClipB, die von MyClip erben. Dies kann umständlich sein, wenn viele Klassen auf MyClip basieren. Dann, wenn das der Fall ist, möchten Sie vielleicht darüber nachdenken, Komposition statt Vererbung zu verwenden.

1

Ich glaube nicht, dass es wirklich getan werden kann. Aber wenn es gemacht werden kann, wird es richtig mit dem Prototyp sein. Vielleicht können Sie den Konstruktor jeder Standardklasse ändern.