2016-08-03 131 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