如何用Box2d获得碰撞点或点?

时间:2012-03-01 17:36:55

标签: 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];   
    }
}

1 个答案:

答案 0 :(得分:0)

在Box2D版本2.3.2中,“接触”点是从b2ContactListener方法的接触参数(第一个参数)获得的。我在括号中加入了联系,因为这些包括在重叠情况下获得的点(形状已超出触摸的位置)。 基本接触点信息是从b2Contact :: GetManifold()方法返回的contacts'b2Manifold结构中获得的。然而,它们位于与该歧管相关联的两个形状的局部坐标中。 如果你想要世界坐标中的接触点(我猜你真的想要的话),你可以调用contacts的'b2Contact :: GetWorldManifold方法来为你填充b2WorldManifold实例。在引擎盖下,这种方法本质上是一种方便的方法,它收集联系人所需的信息,包括b2Manifold,然后将点转换为世界坐标。 请注意,要知道世界上有多少坐标接触点实际上是有效的(可能是0,1或2),或者要知道代表接触的流形类型,您仍然需要访问b2Manifold信息 - 特别是pointCount和类型字段。 最后,@ iforce2d为您链接的网页,我仍然觉得有用,而且比我在这里所说的更具口头和视觉上的全面。