c++ - 如何使用 Box2d 获取一个或多个碰撞点?

标签 c++ objective-c ios box2d

我创建了自己的接触监听器,实现了常用的 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 信息 - 特别是它的 pointCounttype 字段。

最后,@iforce2d 为您链接的网页,我仍然觉得它很有帮助,并且比我在这里所说的内容在语言和视觉上更全面。

关于c++ - 如何使用 Box2d 获取一个或多个碰撞点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9521128/

相关文章:

C++ 链接问题,好像我不能链接到标准 C++ 东西

c++ - 特定 std::bind 返回的数据类型到底是什么?

ios - iOS 中的 UITabbarController 底部有空格,顶部有灰线

iphone - 在不设置不同帧大小的情况下使应用程序与 iPhone 4 和 iPhone 5 兼容

c++ - 使用 double 比 float 快吗?

c++ - move 的对象仍然被破坏?

objective-c - 如何从字体文件中获取字体名称?

ios - 选择单元格时 ImageView 消失但 UILabel 不消失

ios - 在 iOS 中,在分配给 tableView 的数据源和委托(delegate)时,是否应该将 self 转换为 "id"?

ios - UIView:从自定义 XIB 加载导致崩溃