我正在研究我的游戏引擎的一小部分,并想知道如何优化某些部分。这种情况下的双向数据结构
的情况相当简单,它是:
- 我有地图
Tile
S(存储在一个两维数组)(〜26万瓦,但承担更多) - 我有
Item
秒的列表,它始终是至少在大多数瓷砖 - 一个
Tile
在逻辑上包含的Item
小号 - 无限量在游戏执行许多
Item
s为连续LY创建,他们从自身做起Tile
- 每
Item
连续地改变Tile
到一个邻居(上,右,下,左)
截至目前每Item
有其实际Tile
参考,我只是保留一个项目清单。 每次Item
移动到相邻的瓷砖时,我只需更新item->tile = ..
,我很好。这工作正常,但它是单向的。
在扩展引擎的同时,我意识到我必须多次查找瓦片中包含的所有项目,并且这会有效地降低性能(特别是在某些情况下,我必须查找一系列瓦片的所有项目,逐个)。
这意味着我想找到适合自己的查找特定Tile
的所有项目比为O(n)更好的数据结构,但我想,以避免从一个平铺“移动到多少开销另一个“阶段(现在只是分配一个指针,我想避免在那里做很多操作,因为它非常频繁)。
我在考虑一个自定义数据结构,以利用项目总是移动到邻居单元但我目前在黑暗中摸索的事实!任何建议,将不胜感激,即使棘手或神秘的方法。不幸的是,我不能浪费记忆,所以需要一个很好的折衷。
我正在用STL开发它,但没有提升。 (是的,我知道关于multimap
,它不满足我,但我会尝试,如果我没有找到更好的东西)
'瓷砖'地图已经是一个原始的二维指针,例如。 '瓷砖地图[WIDTH] [HEIGHT]'因此我可以随机访问整个地图,但我不希望每个瓷砖都有一个项目列表,因为这些项目很稀疏并且不占用大的区域地图本身.. – Jack 2012-04-16 14:36:30
这听起来像不好的设计。首先删除固定大小的数组,然后使用一个具有适当接口的向量,然后通过给它赋予vector或任何其他地方使'Tile'拥有它的项目。 – 111111 2012-04-16 14:39:07
这不是一个糟糕的设计,整个世界都需要这张地图。每块瓷砖都必须存在,不是因为物品,而是因为许多其他的东西。正如我所说这只是引擎的一小部分:) – Jack 2012-04-16 14:58:43