3 Stimmen

Wie kann ich Vektoren in AS3 dynamisch erstellen?

Ich möchte eine Klasse erstellen, die hauptsächlich eine Vector . Die Klasse wird einige Methoden haben, die sich mit den Elementen im Vektor befassen.

Das Problem, das ich im Moment habe, ist, dass ich nicht herausfinden kann, wie ich dynamisch eine Instanz von Vector . Bisher habe ich dies und ähnliches versucht, ohne Erfolg:

public class List
{
    private var _content:Vector;

    public function List(type:Class)
    {
        _content = new Vector.<type>();
    }
}

6voto

Hier ist, wie ich dynamisch konstruieren einen Vektor von BitmapData (die von der MouseCursorData Klasse erforderlich ist):

var vectorClassOfBitmapData:Class = Class(getDefinitionByName("__AS3__.vec::Vector.<flash.display::BitmapData>"));

var bitmapDataVector:* = new vectorClassOfBitmapData(1,true);

Die obigen Angaben entsprechen denen der Kompilierzeit:

var bitmapDataVector:* = new Vector.<BitmapData>(1, true);

Auf diese Weise können Sie die Klassendefinitionszeichenfolge zur Laufzeit zusammenstellen und getDefinitionByName verwenden, um dynamisch Vektoren verschiedener Datentypen zu konstruieren.

Nicht genau das, was Sie wollten, aber vielleicht hilft es anderen.

5voto

Andrew Odri Punkte 7660

Dieser Beitrag von Paul Robertson (ehemals Senior ActionScript Developer/Writer bei Adobe) gibt ein paar weitere Informationen darüber, wie Vektoren deklariert werden:

Die Vektorklasse erlaubt (erfordert) die Angabe des Typs, den sie zur Kompilierzeit anzugeben - sowohl bei der Deklaration von Variablen als auch bei der Erstellung von Instanzen.

Da der Typ-Parameter ein Literal ist, muss er zur Kompilierzeit angegeben werden. Tatsächlich wird jeder Verweis auf einen Vektor zur Kompilierzeit geprüft, mit Ausnahme von .shift() y .unshift die während der Laufzeit überprüft werden.

Adobes Artikel über indizierte Arrays bietet dazu weitere interessante Informationen. Tatsächlich wird dort erwähnt, dass die strenge Kompilierzeit-Typensicherheit eines der Hauptmerkmale von Vectors ist.

Kurz gesagt: Es ist nicht möglich, eine Variable zu verwenden, um den Typ eines Vektors festzulegen, da der Typ-Parameter ein Literal und eine Kompilierzeitanforderung ist.

Ich hoffe, das hilft!

Zusätzliche Referenzen:

1voto

Adam Harte Punkte 10120

Klingt, als bräuchten Sie nur ein Array! Die Leistung wird mit einem Vector<> nur verbessert, weil der Typ zur Kompilierzeit aussortiert wird. Wenn Sie einen "dynamischen" Typ wollen, dann sollten Sie ein Array verwenden.

0voto

royalstream Punkte 143

Die ursprüngliche Frage ist zwar schon ein paar Jahre alt, aber ich wollte sie gerne weitergeben, weil sie anderen helfen könnte. Sie orientiert sich an der Antwort von Matthew Peterson, geht aber von etwas weniger internen Klassennamen aus (sie geht nur von der .<>-Syntax aus).

    function CreateVectorOf(subtype:Class)
    {
        var vecname:String = getQualifiedClassName(Vector);
        var subname:String = getQualifiedClassName(subtype);
        var vecclass:Class = getDefinitionByName(vecname + ".<" + subname + ">") as Class;
        return new vecclass();
    }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X