2013-02-17 65 views
1

我正在開發2D無限側滾動遊戲。當玩家向右移動時,我會繼續向世界添加隨機區塊,以便它無縫和「無限」。如下圖所示,當視口的右側到達藍色區域時,隨機段會被添加。管理數據頻繁附件的最有效方法

Illustration

目前,我正在做它的方式工作得很好。問題是,我覺得有一個更有效的方式來做到這一點。

世界瓷磚用二維數組表示,追加到世界的功能看起來像這樣。

Array.Resize<Tile[]>(ref world.Tiles, newWidth); 

for (int x = 0; x < newSegment.Width; x++) 
{ 
    world.Tiles[oldWidth + x] = newSegment.Tiles[x]; 
} 

我明白List<T>是理想的對象的動態集合,但請記住,將有可能數千列。如果我假設這是正確的,特別嵌套的很多列表項會產生很多開銷。出於這個原因,我最初與數組一起。

我目前的方法效率低嗎?如果是這樣,我應該如何頻繁管理(平均每10-15秒)將一個隨機分段添加到世界?

回答

2

LinkedList <T>怎麼樣?在你的情況LinkedList<Tile>

或者甚至更好,一Queue<T>?如果你正在做的是排隊-ING瓷磚和移動一個方向隊列可能是最好的開銷(不需要/能力去以前的tile(一個或多個)。)

使用任一集,鏈表或隊列,沒有必要調整數組的大小,而不是你自己。內存管理在內部以高效的方式完成。

+0

'隊列'可能是最好的遊戲,因爲保證了更好的內存局部性和它不會產生垃圾的事實(提供'瓷磚'是一種值類型)。 – 2013-02-18 08:08:37