2016-08-03 133 views
3

我能夠做到這一點是這樣的:如何讓2D矢量在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; 

但我寧願有這樣的事情:

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

這將是更加有用像這樣:

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

因爲現在它實際上讀取像2D數組或網格,這將是非常有用的。我想我可以像這樣做數組,所以有一種方法與矢量?爲每個具有自己的代碼行的大型二維向量填寫每個值都很難查看或理解或寫入。我錯過了什麼,或者這只是一個向量的短暫下降?

謝謝!

回答

1

正如其他人所說的(並進一步解釋,因爲你似乎有點迷茫)你可以使用Vectorglobal function轉換的ArrayVector

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

你可以嵌套調用這個函數來形成2D矢量(你並不真正需要的 - 我建議你只使用一臺矢量):

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]) 
]); 

或者你可以簡單地使用預填充的Vector實例爲shown in the documentation

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

最後,你可以只寫一個函數到二維數組轉換成2D矢量:

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

你對我使用的「(3)」是正確的。它沒有導致編譯錯誤(不知道爲什麼),但它沒有添加任何有用的。我只是在沒有測試的情況下進行測試,並且以任何方式工作,所以即使我使用嚴格模式和警告模式,Flash也必須忽略它。 –

+0

另外,我不確定我在我的問題中說了什麼,這聽起來像我試圖將數組轉換爲向量。我只是想創建一個2D矢量。感謝您花時間在此。我會測試每一個。您的答案中的第二個代碼塊與@Vesper的建議相同。但這不起作用。正如我在我的回答中所說的,該向量似乎需要在一行代碼中創建,然後才能填充。 –

+0

至於我爲什麼要做二維數組,因爲我不能遍歷每個子矢量以獲得其他地方的深度控制函數。 –

4

是的,但不能直接將二維數組(或數組數組)轉換爲向量向量。但是你可以這樣做:

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

啊!括號!!謝謝!明天我會給它一個旋風。 –

+0

當我測試它時,這不起作用。然而,我擺弄了你的代碼,並且讓它工作。我試着編輯你的答案,以便我可以接受它是正確的,但它被拒絕了。好吧。也許你可以編輯它。它需要一行來構建數組,然後您可以按照您的方式填充它,這正是我所需要的。所以第一行將是'var levelVector:Vector。 > =矢量。 >(3);'然後下一行可以是'levelVector = [// yada yada就像你說的'' –

+0

編輯答案不是正確的回答方式。您要麼發表評論,要麼就您如何解決此問題添加自己的答案。 – Vesper