我有一个使用Box2D的物理模拟,在其中具有相同整数ID的实体不会发生碰撞,例如属于同一角色的实体。但是我有一个问题,我需要能够为每个可能的实体获得唯一的编号,以便没有两个角色意外地获得相同的ID。有限数量的实体被创建和销毁,因此必须在它们属于的实体消失后释放唯一的ID。
一个名为
迄今为止,我想到了两种方法,但是我不确定哪种方法更好,或者两种方法是否都适用:
- 保持一个
你们认为有更好的方法吗?
一个名为
World
的类负责创建和销毁所有实体,并且也是管理唯一编号生成和物理模拟相关任何其他事项的实体。迄今为止,我想到了两种方法,但是我不确定哪种方法更好,或者两种方法是否都适用:
- 保持一个
vector<short>
,数据是浮动参考数的数量,而向量中的位置则是ID本身。这种方法的缺点在于在编写操作组ID的实体时会创建不必要的复杂性,因为它们需要确保告诉World
他们拿走了多少个参考。
- 使用vector<bool>
,数据表示该ID是否可用,而向量中的位置则是ID本身。如果不存在空闲插槽,则向量将随着每次新的唯一ID调用而增长。缺点是一旦向量达到一定大小,就需要对整个模拟进行审核,但它的优点是实体能够获取唯一编号,而无需帮助管理引用计数。你们认为有更好的方法吗?