1

我正在开发一个 2D 无限横向滚动游戏。随着玩家向右移动,我继续向世界添加一段随机的图块,使其无缝且“无限”。如下图所示,当视口右侧到达蓝色区域时,会附加随机段。

插图

我这样做的方式目前工作得很好。问题是我觉得有一种更有效的方法。

世界的瓦片以二维数组表示,附加到世界的函数看起来像这样。

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 秒)向世界添加一个随机段?

4

1 回答 1

2

LinkedList<T> 怎么样?在你的情况下LinkedList<Tile>

或者甚至更好,一个Queue<T>?如果您所做的只是将 Tiles 排入队列并移动一个方向(不需要/能够转到前一个 tile(s),则队列可能是开销的最佳选择。)

无论是集合、LinkedList 还是队列,都不需要调整数组的大小,而不是你自己。内存管理是在内部以一种有效的方式完成的。

于 2013-02-17T06:22:06.807 回答