我正在研究我的游戏引擎的一部分,并思考如何优化其中的某些部分。
情况非常简单,如下所示:
- 我有一个Tile(存储在二维数组中)地图(~260k个tile,但假设更多)。 - 我有一个Item列表,它始终位于至少一个Tile和最多一个Tile中。 - 一个Tile可以包含无限数量的Item。 - 在游戏执行期间,许多Item会不断被创建,并从它们自己的Tile开始。 - 每个Item不断将其Tile更改为其邻居之一(向上、向右、向下、向左)。
到目前为止,每个Item都有对其实际Tile的引用,我只保留了一个物品列表。每当一个Item移动到相邻的Tile时,我只需更新item->tile = ...,这很好用。这很好用,但是它是单向的。
在扩展引擎时,我意识到我必须多次查找包含在Tile中的所有Item,而这实际上会降低性能(特别是在某些情况下,我必须逐个查找一系列Tile的所有项)。
这意味着我想找到一个适合更好地查找特定Tile中所有项目的数据结构,而不是O(n),但我想避免在“从一个Tile移动到另一个Tile”阶段中产生过多的开销(现在只是分配指针,我想避免在那里进行许多操作,因为这是相当频繁的)。
我正在考虑使用自定义数据结构来利用项目始终移动到相邻单元格的事实,但目前我还没有头绪!任何建议都将不胜感激,即使是棘手或神秘的方法。不幸的是,我不能浪费内存,因此需要良好的权衡。 我正在使用C++和STL进行开发,但没有使用Boost。(是的,我知道multimap,但它并不令我满意,但如果找不到更好的东西,我会尝试的)。
情况非常简单,如下所示:
- 我有一个Tile(存储在二维数组中)地图(~260k个tile,但假设更多)。 - 我有一个Item列表,它始终位于至少一个Tile和最多一个Tile中。 - 一个Tile可以包含无限数量的Item。 - 在游戏执行期间,许多Item会不断被创建,并从它们自己的Tile开始。 - 每个Item不断将其Tile更改为其邻居之一(向上、向右、向下、向左)。
到目前为止,每个Item都有对其实际Tile的引用,我只保留了一个物品列表。每当一个Item移动到相邻的Tile时,我只需更新item->tile = ...,这很好用。这很好用,但是它是单向的。
在扩展引擎时,我意识到我必须多次查找包含在Tile中的所有Item,而这实际上会降低性能(特别是在某些情况下,我必须逐个查找一系列Tile的所有项)。
这意味着我想找到一个适合更好地查找特定Tile中所有项目的数据结构,而不是O(n),但我想避免在“从一个Tile移动到另一个Tile”阶段中产生过多的开销(现在只是分配指针,我想避免在那里进行许多操作,因为这是相当频繁的)。
我正在考虑使用自定义数据结构来利用项目始终移动到相邻单元格的事实,但目前我还没有头绪!任何建议都将不胜感激,即使是棘手或神秘的方法。不幸的是,我不能浪费内存,因此需要良好的权衡。 我正在使用C++和STL进行开发,但没有使用Boost。(是的,我知道multimap,但它并不令我满意,但如果找不到更好的东西,我会尝试的)。
Tile map[WIDTH][HEIGHT]
,因此我可以随机访问整个地图,但我不想为每个瓦片都有一个物品列表,因为这些物品是稀疏的,并且不占据地图本身的大区域。 - JackTile
本地向量或其他方式,使其拥有自己的项目。 - 111111