2013-02-17 66 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