我创建了自己的接触监听器,实现了常用的 4 种方法:BeginContact、EndContact、PreSolve、PostSolve。
我可以从这些方法的哪些参数获取当前联系点?
我试过类似的方法,但没有任何帮助
void CListener::PreSolve(b2Contact* contact, const b2Manifold* oldManifold) {
for(int i = 0 ; i < oldManifold->pointCount; ++i) {
b2ManifoldPoint p = oldManifold->points[i];
}
}
最佳答案
在 Box2D 版本 2.3.2 中,“接触”点是从 b2ContactListener
方法的 contact
参数(第一个参数)中获得的。我将接触放在括号中,因为这些也包括在重叠情况下获得的点(形状已经超出接触范围)。
基础接触点信息是从b2Contact::GetManifold()
方法返回的接触点b2Manifold
结构中获取的。然而,它们位于与该流形关联的两个形状的局部坐标中。
如果您想要世界坐标中的接触点(我猜这正是您想要的),您可以改为调用接触点的 b2Contact::GetWorldManifold
方法来填充 b2WorldManifold
实例给你。在底层,此方法本质上是一种便捷方法,它从包括 b2Manifold
在内的接触点收集所需信息,然后将这些点转换为世界坐标。
请注意,要知道有多少世界坐标接触点实际上是有效的(可能是 0、1 或 2)或知道代表接触的流形类型,您仍然需要访问 b2Manifold
信息 - 特别是它的 pointCount
和 type
字段。
最后,@iforce2d 为您链接的网页,我仍然觉得它很有帮助,并且比我在这里所说的内容在语言和视觉上更全面。
关于c++ - 如何使用 Box2d 获取一个或多个碰撞点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9521128/