我有一个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;
答案 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)
代码工作正常,我重写了引擎,现在它工作正常,问题不在公式中(我认为)。