Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 帮助解决设计问题_C++_Box2d - Fatal编程技术网

C++ 帮助解决设计问题

C++ 帮助解决设计问题,c++,box2d,C++,Box2d,这是我的问题 我正在使用一个叫做Box2D的物理库。我能够连接一个听众,当两个装置发生碰撞时,他会告诉我 Box2D的基本工作方式是创建实体。因此,我只知道碰撞的装置属于哪个物体。在我的游戏中,我有一个实体,从中我有一个实体。PhysicsEntity包含指向实体的指针。它还有一个来自实体的sendMessage方法。问题是,如何从b2Body向PhysicsEntity发送冲突消息。我想做的是将b2Body的userData void*设置为其对应的PhysicsEntity。尽管如此,要想做

这是我的问题

我正在使用一个叫做Box2D的物理库。我能够连接一个听众,当两个装置发生碰撞时,他会告诉我

Box2D的基本工作方式是创建实体。因此,我只知道碰撞的装置属于哪个物体。在我的游戏中,我有一个实体,从中我有一个实体。PhysicsEntity包含指向实体的指针。它还有一个来自实体的sendMessage方法。问题是,如何从b2Body向PhysicsEntity发送冲突消息。我想做的是将b2Body的userData void*设置为其对应的PhysicsEntity。尽管如此,要想做到这一点,必须制造一个空白似乎是非常错误的

有没有更好的方法,我可以很快地知道与b2Body关联的物理实体,而无需强制转换或查找


谢谢

这实际上正是userData指针的用途。这是一个相当标准的范例——另一个例子是pthread_create或CreateThread等函数


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

这正是像userData字段这样的字段的用途——引用与库对象相关的应用程序数据。这是对
void*
的完全恰当的使用


如果你问C,我会说你也不需要使用任何类型的转换,因为转换为“从代码>空白”>代码>可以不需要任何转换,需要使用一个CAST来表示可能的问题,但是如果我记得正确的C++需要那些强制转换(我不使用C++足够确定).

既然类是多态的,那么我必须使用动态强制转换吗?不,可以使用静态强制转换或c样式的cast(不过最好使用前者)。您仅在这里将其转换为同一指针类型,这样无论哪种方式都可以。RealTytPype甚至可以工作——但这不是必要的,它将指示一些丑陋的东西,而这并不是(至少不是那么多)。C++需要向空的和从空*的强制转换。在某种程度上,它帮助人们使用void*作为“指向某物的指针”,或者作为从一种类型到另一种类型的廉价转换,这会在多重继承的情况下引发破坏。