【问题标题】:Box2D detecting one way collision for round objectsBox2D 检测圆形物体的单向碰撞
【发布时间】:2016-09-09 20:20:19
【问题描述】:

我是 Box2D 的新手,目前正在尝试使用 b2Contact 检测对象(球)是否设法穿过另一个对象(目标)。为此,我实现了b2ContactListener,一切正常。

但是,我想知道,有没有办法让我设置为仅检测一个方向的碰撞?例如,仅从左到右,如果球从右到左穿过,碰撞将不计入。从文档中可以看出,我想从here 实现类似的东西。

在文档中,他们通过使用对象中的点来检测碰撞的方向

int numPoints = contact->GetManifold()->pointCount;
b2WorldManifold worldManifold;
contact->GetWorldManifold( &worldManifold );

但是,就我而言,我使用b2CircleShape 作为我的球对象,它间接将 numPoints 返回为 0。因此,我无法使用上述方法检测到碰撞。有什么办法可以检测到圆圈中的点吗?或者有什么方法可以检测到碰撞的方向?

【问题讨论】:

  • 也许你可以考虑物体的相对速度和它们的位置?

标签: c++ listener box2d collision


【解决方案1】:

也许这会对你有所帮助。

b2WorldManifold manifold;
contact->GetWorldManifold(&manifold);
manifold.normal.Normalize();
if(manifold.normal.x > 0){
   [...]
}

【讨论】:

    猜你喜欢
    • 2013-01-28
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多