你如何压扁3D阵列?

时间:2014-10-02 14:00:43

标签: arrays flatten

我有一个3D数组,其中包含游戏中每个不同块的整数值; int [x] [y] [z] = blockid;

我需要将数组展平为一维数组; int [VALUE] = blockid;

我已经浏览了网站以获得答案,我看到的大多数答案都是错误的并且给出了非常糟糕的结果,例如我的世界是2048x2048x128块,即536870912块。我需要一个数学方程式,给出536870912 536870912不同值的不同结果。

这是我在网站上找到的一个例子(不起作用):value = x + y * maxX + z * maxZ * maxY 世界是一个正方形,虽然高度是固定的128。 感谢。

编辑: setter代码:

world.blocks[x+y*world.maxSize+z*world.maxSize*world.maxSizeY] = Block.DARK_STONE.getId();
过去曾经是 world.blocks[x][y][z] = Block.DARK_STONE.getId();

getter code:

World.blocks[x+y*world.maxSize+z*world.maxSize*world.maxSizeY];

而不是

World.blocks[x][y][z];

块[]

blocks = new int[2048*2048*128];

maxSize和maxSizeY

maxSize = 2048;
maxSizeY = 128;

2 个答案:

答案 0 :(得分:3)

你的例子似乎非常接近。它应该是

x +(y * maxX)+(z * maxX * maxY);

使用int [2] [3] [4]会给我:

0 0 0 = 0 + 0 + 0 = 0
1 0 0 = 1 + 0 + 0 = 1
0 1 0 = 0 + 2 + 0 = 2
1 1 0 = 1 + 2 + 0 = 3
0 2 0 = 0 + 4 + 0 = 4
1 2 0 = 1 + 4 + 0 = 5
0 0 1 = 0 + 0 + 6 = 6
1 0 1 = 1 + 0 + 6 = 7
0 1 1 = 0 + 2 + 6 = 8
1 1 1 = 1 + 2 + 6 = 9
0 2 1 = 0 + 4 + 6 = 10
1 2 1 = 1 + 4 + 6 = 11

......你明白了。

答案 1 :(得分:0)

代码工作正常,我重写了引擎,现在它工作正常,问题不在公式中(我认为)。