帮助解决设计问题

时间:2011-07-04 22:48:08

标签: c++ box2d

这是我的问题。

我正在使用名为Box2D的物理库。我能够连接一个能告诉我两个灯具碰撞时的听众。

基本上Box2D的工作方式是创建b2Bodies。因此,我只知道哪个b2Body碰撞的夹具属于哪个。在我的游戏中,我有一个实体,从那里我有一个PhisicsEntity。 PhysicsEntity拥有指向b2Body的指针。它还有一个来自Entity的sendMessage方法。问题是,从b2Body,我如何向PhysicsEntity发送冲突消息。我想做的是将b2Body的userData void *设置为相应的PhysicsEntity。尽管如此,为了做到这一点,必须施放一个空白*似乎是非常错误的。

有没有更好的方法可以在不进行强制转换或查找的情况下快速了解与b2Body相关的物理实体?

由于

2 个答案:

答案 0 :(得分:0)

这实际上就是userData指针的意思。这是一个相当标准的范例 - 在另一个例子中查看pthread_create或CreateThread等函数。

如果您遇到的库不允许您使用void *(或者不安全 - 例如将其作为int存储在本地),那么您可以使用std :: map来解析该类型。虽然这样做的速度较慢且开销较大。

答案 1 :(得分:0)

这正是userData字段之类的字段的用途 - 用于引用应用程序与库对象相关的数据。这完全适用于void *

如果你问的是C,我会说你也不应该使用任何演员阵容,因为转换到void *和从{{1}}转换都可以在没有任何演员阵容的情况下进行,并且需要使用演员阵容是一个可能的问题,但如果我没记错的话,C ++需要那些演员表(我不会使用C ++来确定)。