我只是很好奇,如果我的车体中有2个或更多没有“连接在一起”的灯具,我该如何在代码中确定?这是我的意思的示例:

我标记了每个独特夹具的顶点,只是为了完全清楚地表明它们是彼此不共享顶点的单独形状。但是它们被组合成一个整体。如您所见,两个固定装置彼此非常靠近或“接触”,其中一个固定装置彼此分开。我想知道如何在Box2D中查询物体的固定装置,以便能够在运行时找到它。
为了使这一切都可见,它用于创建和处理可破坏的物体。该图像粗略地表示了将孔穿入体内的一组固定装置之后将发生的情况。我需要查询以查看哪些固定装置相互接触,以便可以将一个主体一分为二,因为它们自然应该在那一点上。

最佳答案

如果已经准备好新的灯具,则可以使用b2TestOverlap函数来检查它们是否与重叠。该函数位于b2Collision.h中:

/// Determine if two generic shapes overlap.
bool b2TestOverlap( const b2Shape* shapeA, int32 indexA,
                    const b2Shape* shapeB, int32 indexB,
                    const b2Transform& xfA, const b2Transform& xfB );

可以通过fixture-> GetShape()找到形状,并且多边形的索引参数将为零。
由于灯具位于同一主体上,因此最后两个参数都可以是body-> GetTransform()。

我从来没有亲自使用过它,所以我不能肯定地告诉您,但是请注意,此函数的名称为“overlap”,对于您在图中的A和B固定装置,它可能不会返回正数,因为从技术上讲,不要认为它们重叠。如果是这种情况,我认为您是一个人,因为Box2D不提供任何“动人”测试。

顺便说一句,康斯坦丁纽斯提到的联系人列表仅对不同物体上的灯具发生碰撞有效-同一物体上的灯具不会发生碰撞。

10-05 17:47