我正在开发一款2D无限侧滚动游戏。当玩家向右移动时,我会继续向世界附加一段随机区域,以使其无缝且“无限”。如下图所示,当视口的右侧到达蓝色区域时,会附加随机段。
我现在这样做的方式很好。问题是我觉得有一种更有效的方法。
世界的瓷砖以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秒)向世界追加一个随机段?
答案 0 :(得分:2)
LinkedList <T>
怎么样?在您的情况下LinkedList<Tile>
或者甚至更好,Queue<T>
?如果您所做的只是排队方块并移动一个方向(不需要/能够转到上一个方块),那么队列可能是最好的开销。)
使用集合,LinkedList或Queue,无需调整数组大小,也不需要自己调整大小。内存管理是在内部以高效的方式完成的。