2011-09-14 67 views
0

我想提出一個遊戲,我已存儲的INT數組INT整數三維地圖的座標:如何獲得線性陣列

int width = 256; 
int height = 256; 
int depth = 64; 
int[] map = new int[width * height * depth]; 

我需要能夠得到獲得X,Y,索引的z。我想出了目前的方法是:

private int getX(int blockID) { 
    return blockID % width; 
} 

private int getY(int blockID) { 
    return (blockID % depth)/height; 
} 

private int getDepth(int blockID) { 
    return blockID/(width * height); 
} 

用於獲取x和深度的方法似乎工作,但我不能得到的getY()正常工作,我不斷收到和ArrayIndexOutOfBoundsException異常類似下面:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1 
at game.Level.updateLighting(Level.java:98) 
at game.Level.generateMap(Level.java:58) 
at game.Level.<init>(Level.java:21) 
at game.mainClass.main(Minecraft.java:6) 

請幫助,如果你知道如何做到這一點。

回答

3

夥計。只需使用3D陣列即可。

int[][][] map = new int[width][height][depth]; 

那麼你不必擔心從blockID多路分解xyz指數。他們是獨立的,所以保持他們的方式。

+1

+1 「哥們」;也爲一個很好的答案;) – WaelJ

+0

其效率不高 –

+0

@stas謹慎詳細說明?在什麼方面,一個一維陣列的'w * h * d'元素比一個等效的三維陣列「效率更高」? –

1

嘗試

private int getY(int blockID) { 
    return (blockID/width) % height 
}