2013-03-28 180 views
0

我正在用C++編寫平臺遊戲,並使用平鋪地圖構建世界。訪問2D數組中的元素

的地圖中包含有分配的瓷磚值:

如二維數組:

int map[4][4]={ 
    {1, 1, 1, 1}, 
    {1, 0, 0, 1}, 
    {1, 0, 0, 1}, 
    {1, 1, 1, 1}, }; 

創建以類似的方式精靈:int sprite[1][1]={ {2} };

我的問題是,怎麼辦您訪問二維數組中的特定圖塊或元素

我讀了這個post(3rd post down),想知道二維數組是不是最好用。

我的精靈始終保持居中對着窗口,當按下按鍵時,我的世界在他身後移動。

我想一定瓷磚碰撞,因此也需要我的精靈二維數組瓷磚和我的地圖2D陣列之間的相互作用......

而且因爲它的立場,我可以走出地圖的,因爲我的天堂」否則就編碼。我將如何去關於這個理想情況下,我想阻止他離開地圖,然後我可以整合碰撞。

下面是什麼東西的樣子(但比上述更大的地圖)的截圖: reanimation platformer

+0

'int sprite [1] [1] = {{2}};'這是一個只有一個元素的2D數組。你爲什麼要這樣? 2代表什麼? –

+0

我嘗試使用'OpenGL quad'繪製一個精靈,但它沒有顯示在屏幕上,當我這樣做時也不會顯示這些圖塊。我使用了2D數組來解決問題。另外我認爲它更容易讓精靈保持平鋪狀態,因爲它更容易與具有自定義矩形的貼磚互動瓷磚。 '2'表示'Tile2'被分配的值。 – Reanimation

回答

1

如果我有:

int array[4][4]; 

我可以通過訪問元素

array[a_num][also_a_num] 

其中i和j是有效索引。

通常當我想要這樣的東西時,我只是使用1d數組和一些數學。

int height = a_num; 
int width = also_a_num; 
int amap[height * width]; 
int x_pos,y_pos; 
int value = amap[y_pos*width + x_pos]; 

你可以很容易地檢查x_pos和y_pos的邊界。

至於碰撞,你可以嘗試一個結構數組。

struct tile{ 
    bool walkable; 
    int type; 
}; 

tile amap[height*width]; 
+0

這是一個非常好的答案。謝謝:D我會在之前給它。 是的,該問題鏈接的帖子/論壇也使用一維數組。感謝您的時間,我們非常感謝。 – Reanimation