一尘不染

如何在1D数组中“拉平”或“索引” 3D数组?

c#

我正在尝试将3D数组扁平化为游戏中的“块”系统的1D数组。这是一个3D块游戏,基本上我希望块系统与Minecraft的系统几乎相同(但是,无论如何,这都不是Minecraft的克隆)。在我以前的2D游戏中,我使用以下算法访问了扁平数组:

Tiles[x + y * WIDTH]

但是,由于缺少Z轴,因此这显然不适用于3D。我不知道如何在3D空间中实现这种算法。宽度,高度和深度都是常数(宽度和高度一样大)。

x + y*WIDTH + Z*DEPTH吗 我对数学非常不满意,我刚开始进行3D编程,所以我很迷失:|

PS。这样做的原因是,我正在循环访问很多东西,并从索引中获取东西。我知道一维数组比多维数组要快(由于我不记得:P的原因)。即使这不是必需的,我也希望性能尽可能好:)


阅读 231

收藏
2020-05-19

共1个答案

一尘不染

算法基本相同。如果您有3D阵列,Original[HEIGHT, WIDTH, DEPTH]则可以将其转换Flat[HEIGHT * WIDTH * DEPTH]

Flat[x + WIDTH * (y + DEPTH * z)] = Original[x, y, z]

顺便说一句,相对于.NET中的多维数组,您应该更喜欢数组数组。性能差异很大

2020-05-19