我正在研究我的游戏引擎的一小部分,并想知道如何优化某些部分。
情况很简单,如下:
- 我有一张
Tile
s 的地图(存储在一个二维数组中)(~260k 瓷砖,但假设更多) - 我有一个
Item
s 列表,它们总是至少和最多一个 tile - A
Tile
在逻辑上可以包含无限数量的Item
s - 在游戏执行过程中,许多
Item
s 不断创建,它们从自己的开始Tile
- 每个
Item
不断地改变它Tile
的邻居之一(上,右,下,左)
到目前为止,每个Item
都引用了它的实际Tile
,我只保留了一个项目列表。每次Item
移动到相邻的图块时,我都会更新item->tile = ..
,我很好。这工作正常,但它是单向的。
在扩展引擎时,我意识到我必须多次查找拼贴中包含的所有项目,这实际上会降低性能(尤其是在某些情况下,我必须逐个查找一系列拼贴的所有项目) .
这意味着我想找到一个适合于找到特定项目的所有项目的数据结构Tile
比O(n)更好,但我想避免在“从一个瓦片移动到另一个瓦片”阶段(现在只是分配一个指针,我想避免在那里做很多操作,因为它非常频繁)。
我正在考虑使用自定义数据结构来利用项目总是移动到相邻单元格的事实,但我目前正在黑暗中摸索!任何建议都会受到赞赏,即使是棘手或神秘的方法。不幸的是,我不能只是浪费内存,因此需要进行良好的权衡。
我正在用 STL 用 C++ 开发它,但没有 Boost。(是的,我确实知道multimap
,它不满足我,但如果我没有找到更好的东西,我会尝试)