【发布时间】:2011-08-31 03:31:37
【问题描述】:
我有一个物理模拟(使用 Box2D),其中具有相同整数 ID 的物体不会发生碰撞,例如,属于同一角色的物体。我有一个问题,因为我需要能够为每个可能的实体获取一个唯一的数字,这样没有两个字符会意外地获得相同的 ID。实体的数量是有限的,但它们是根据模拟的要求创建和销毁的,因此一旦它们所属的实体消失,就有必要释放唯一 ID。
一个类World负责创建和销毁所有物体,也是管理唯一编号生成的实体,以及涉及物理模拟的任何其他事物。
到目前为止,我想到了两种方法,但我不确定哪种方法会更好,如果有的话:
保留
vector<short>,数据是浮动的引用数,向量中的位置是ID本身。这种方法的缺点是在对操纵组 ID 的实体进行编码时会产生不必要的复杂性,因为它们需要确保告诉World他们取出了多少引用。-
保留
李>vector<bool>,数据是该 ID 是否空闲,向量中的位置是 ID 本身。如果不存在空闲槽,则向量会随着对唯一 ID 的每次新调用而增长。缺点是一旦向量达到一定大小,就需要对整个模拟进行审计,但优点是实体能够获取唯一数字,而无需帮助管理引用计数。
大家怎么看,有没有更好的办法?
【问题讨论】:
-
每个身体有一个对象吗?在这种情况下,您可以只比较对象的地址。
-
每个主体都有一个或多个附加的“形状”图元,它们有自己的过滤器 ID,因此一个主体可能有多个。我喜欢使用地址的想法,但过滤器数据存储为负数
short,(正数 ID 实际上意味着完全不同的东西,即无论如何总是与具有相似 ID 的形状发生冲突)
标签: c++ algorithm vector numbers