从单个数组生成2d数组

时间:2014-08-11 20:36:16

标签: actionscript-3 flash actionscript

我为网页游戏创建了一个关卡编辑器,我可以构建,保存,加载和播放关卡。 现在我想编辑某些级别,但我有一个奇怪的情况。

我将一个级别导出为单个数组,看起来像3,4,5,5,7,89,4,2,1 ......这些数字代表帧。 (瓦系)。

现在,如果我想编辑这个级别并再次保存,我需要将一个级别描述为多维数组。

实际上,当我保存关卡时,我有一个描述我的地图的字符串,然后我将字符串转换为数组。

那么你能告诉我(如果可能的话),如何将这个array1(或字符串)转换为array2? 假设我只有25个图块(水平编辑器中的图是array1)

array1 =
1,1,1,1,1,
2,2,2,2,2,
3,3,3,3,3,
4,4,4,4,4,
5,5,5,5,5

我需要这个:

array2 =
[
[1,1,1,1,1],
[2,2,2,2,2],
[3,3,3,3,3],
[4,4,4,4,4],
[5,5,5,5,5]
];

更新:

所以我需要2d数组来构建级容器。 我没有平板游戏的经验,但在这里你可以看到我的所作所为。 让我们说我有2d数组,这就是我创建一个新级别容器的方式:

            for (i = 0; i < array2.length; i++)
            {
                for (var j = 0; j < array2[i].length; j++)
                {
                    tile = new Tile();
                    tile.name = "" + i + j;
                    tile.x = j * tile.width;
                    tile.y = i * tile.height;
                    levelContainer.addChild(tile);
                    tile.gotoAndStop(array2[i][j]+1);
                    tile.addEventListener(MouseEvent.MOUSE_DOWN,
                    buildingLeve);
                }
            }

            addChild(levelContainer);

我试图从Rudolfwm和Marcela建议的单阵列中获取二维数组,但是当我想使用新的array2编辑一个关卡容器时,我的关卡会出现错误的帧。

例如,如果正确的帧是1,则tile转到第11帧, 如果我创建自己的2d数组,上面的代码(构建级别)可以工作,但如果我按照建议将字符串转换为2d数组则不行。

2 个答案:

答案 0 :(得分:2)

尝试array1 [x + y * row],其结果与将所有数据复制到array2 [x] [y]时的结果相同。

或者如果你坚持使用2D阵列:

var array2 = new Array(row);
for (var y = 0; y < row; y++) {
 array2 [y] = new Array(column);
 for(var x=0; x < column; x++) {
    array2 [y][x]=array1[x+y*row];
 }
}

答案 1 :(得分:1)

您从String开始,并使用Array将其转换为String.split()

一旦有了临时数组,就可以使用嵌套循环来填充最终数组(arr21)。

var row:int = 5;
var column:int = 5;

var arr1:String = "1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5";
var tempArr:Array = arr1.split(',');
var arr2:Array = [];
for(var i:int = 0; i < row; i++)
{
    arr2[i] = []; // create a new row array
    for(var j:int = 0; j < column; j++)
    {
        // grab the first item from the temp array and push it onto the row array
        arr2[i].push(tempArr.shift());
    }
}

注意:这是优化,并且可能会因较大级别的地图而变得非常滞后。这只是为了让您了解可以从哪里开始。