0

我的游戏分为区域网格。每个区域都有一个对象列表。每个对象可以位于 1 个以上的区域(最多 tp 4)。

当一个对象移动时,我检查它所在的区域,如果它们发生变化,我将它们从它们所在的区域中删除并将它们添加到新的区域中。对象的顺序并不重要。我需要快速插入和移除。我永远不需要随机元素访问。

理想的数据结构是什么?

4

2 回答 2

1

在每个实体中:

HashSet<Region> regions;

在每个地区:

HashSet<Entity> entities;

您的区域和实体应正确定义 hashCode 和 equals 以获得最佳性能。

当您的实体更改区域时,请先将其从旧区域中删除,然后再从实体中删除区域,然后在将新区域添加到实体后将其添加到新区域。

迭代任何一组都很简单。你没有保证的迭代顺序,但你说那没关系。假设正确定义了 hashCode和HashSetequals,插入/删除是恒定的时间。

for(Entity entity: entities) {
    // do something
}
于 2012-11-11T21:47:32.920 回答
0

Simple array of 4 pointers to the Lists corresponding to each region seems fine to me.

于 2012-11-11T20:28:45.687 回答