2016-08-03 15 views
3

Ich bin in der Lage zu tun, es so zu machen:Wie 2D-Vektor in AS3

 var levelVector = new Vector.<Vector.<int>>(); 
     levelVector[0] = new Vector.<int>(); 
     levelVector[1] = new Vector.<int>(); 
     levelVector[2] = new Vector.<int>(); 


     levelVector[0][0] = 0; 
     levelVector[0][1] = 0; 
     levelVector[0][2] = 5; 
     levelVector[0][3] = 0; 
     levelVector[0][4] = 0; 
     levelVector[0][5] = 0; 
     levelVector[1][0] = 0; 
     levelVector[1][1] = 0; 
     levelVector[1][2] = 5; 
     levelVector[1][3] = 0; 
     levelVector[1][4] = 0; 
     levelVector[1][5] = 0; 
     levelVector[2][0] = 0; 
     levelVector[2][1] = 5; 
     levelVector[2][2] = 2; 
     levelVector[2][3] = 2; 
     levelVector[2][4] = 2; 
     levelVector[2][5] = 2; 

aber ich möchte lieber etwas wie dieses:

levelVector = [[0,0,3,2,1],[1,1,2,2,2],[3,2,2,1,2]]; 

die selbst wäre nützlicher wie folgt:

levelVector = [ 
       [0,0,3,2,1], 
       [1,1,2,2,2], 
       [3,2,2,1,2] 
       ]; 

weil jetzt liest es tatsächlich wie ein 2D-Array oder ein Gitter, das wäre sehr hilfreich. Ich denke ich kann das mit Arrays so machen, also gibt es einen Weg mit Vektoren? Das Ausfüllen jedes Wertes für einen großen zweidimensionalen Vektor, jeder mit seiner eigenen Codezeile, ist schwer zu sehen oder zu verstehen oder zu schreiben. Fehle ich etwas oder dies nur ein kurzer Fall von Vektoren?

Danke!

Antwort

1

Wie schon andere gesagt haben (und es weiter zu erklären, da Sie scheinen ein wenig verwirrt zu sein) können Sie die Vectorglobal function verwenden, um eine Array einen Vector zu konvertieren:

var level:Vector.<int> = Vector.<int>([ 
    0, 0, 3, 2, 1, 
    1, 1, 2, 2, 2, 
    3, 2, 2, 1, 2 
]); 

Und Sie können Nest Anrufe an diese Funktion ein 2D-Vektor zu bilden (die Sie nicht wirklich brauchen - empfehle ich Ihnen nur einen flachen Vektor verwenden):

var level:Vector.<Vector.<int>> = Vector.<Vector.<int>>([ 
    Vector.<int>([0, 0, 3, 2, 1]), 
    Vector.<int>([1, 1, 2, 2, 2]), 
    Vector.<int>([3, 2, 2, 1, 2]) 
]); 

Oder Sie können einfach vorausgefüllt Vektor Instanziierung als shown in the documentation verwenden:

var level:Vector.<Vector.<int>> = new <Vector.<int>>[ 
    new <int>[0, 0, 3, 2, 1], 
    new <int>[1, 1, 2, 2, 2], 
    new <int>[3, 2, 2, 1, 2] 
]; 

Schließlich Sie nur eine Funktion schreiben, könnte ein 2D-Array in einen 2D-Vektor zu konvertieren:

function createLevelVector(level:Array):Vector.<Vector.<int>> { 
    var levelVector:Vector.<Vector.<int>> = new Vector.<Vector.<int>>(level.length); 
    for (var i:int = 0; i < level.length; i++) { 
     levelVector[i] = Vector.<int>(level[i]); 
    } 
    return levelVector; 
} 

var level:Vector.<Vector.<int>> = createLevelVector(
    [ 
     [0, 0, 3, 2, 1], 
     [1, 1, 2, 2, 2], 
     [3, 2, 2, 1, 2] 
    ] 
); 
+0

Sie haben Recht bezüglich der '(3)' die ich benutzt habe. Es verursachte keinen Kompilierungsfehler (nicht sicher, warum), aber es fügte auch nichts Nützliches hinzu. Ich habe es einfach getestet und funktioniert so oder so, also muss Flash es einfach ignorieren, obwohl ich strikten Modus und Warnmodus verwende. –

+0

Ich bin mir auch nicht sicher, was ich in meiner Frage gesagt habe, dass es so klingt, als würde ich versuchen, ein Array in einen Vektor zu konvertieren. Ich versuche nur, einen 2D-Vektor zu erstellen. Danke, dass du dir die Zeit genommen hast. Ich werde jeden von ihnen testen. Ihr zweiter Codeblock in Ihrer Antwort ist der gleiche wie @Vespers Vorschlag. Aber das funktioniert nicht. Wie ich in meiner Antwort gesagt habe, scheint der Vektor in einer Codezeile erstellt zu werden, und dann kann er ausgefüllt werden. –

+0

Warum ich ein 2D-Array mache, liegt daran, dass ich in der Lage sein werde, jeden Untervektor für eine Tiefenkontrollfunktion an anderer Stelle zu durchlaufen. –

4

Ja, aber Sie können ein 2D-Array (oder Array von Arrays) nicht direkt in einen Vektor von Vektoren konvertieren. Aber Sie können wie folgt tun:

var levelVector:Vector.<Vector.<int>>=Vector.<Vector.<int>>(
    [ 
     Vector.<int>([0,0,3,2,1]), 
     Vector.<int>([1,1,2,2,2]), 
     Vector.<int>([3,2,2,1,2]) 
    ] 
); 
+0

Ah !! Klammern !! Vielen Dank! Ich werde es morgen drehen. –

+0

Das funktioniert nicht, wenn ich es teste. Ich habe jedoch mit deinem Code herumgespielt und ihn zur Arbeit gebracht. Ich habe versucht, deine Antwort so zu bearbeiten, dass ich sie als korrekt akzeptieren konnte, aber sie wurde abgelehnt. Naja. Vielleicht kannst du es bearbeiten. Es muss eine Zeile zum Erstellen des Arrays haben, dann können Sie es so füllen, wie Sie es haben, und genau das ist, wonach ich suche. Also wird die erste Zeile 'var levelVector: Vector sein. . > = Vektor. > (3); 'und dann kann die nächste Zeile' levelVector = [// yada yada genau wie du gesagt haben ' –

+0

Bearbeiten einer Antwort ist nicht die richtige Antwort. Entweder Sie kommentieren oder fügen Ihre eigene Antwort hinzu, wie Sie dieses Problem gelöst haben. – Vesper