如何在AS3中制作2D矢量

时间:2016-08-03 06:27:51

标签: arrays actionscript-3 vector

我能够这样做:

        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数组或网格,这将非常有用。我想我可以用数组这样做,所以有没有一种方法可以使用Vectors?填充大型二维向量的每个值,每个都有自己的代码行很难查看或理解或写入。我错过了什么或者这只是向量的短暂下降吗?

谢谢!

2 个答案:

答案 0 :(得分:4)

是的,但是你不能直接将2D数组(或数组数组)转换为向量向量。但你可以这样做:

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

答案 1 :(得分:1)

正如其他人所说(并进一步解释,因为您似乎有点困惑),您可以使用Vector global functionArray转换为Vector

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

或者您可以简单地使用预先填充的矢量实例化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数组转换为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]
    ]
);