Box2D冲突回调

Box2D collision callback

本文关键字:回调 冲突 Box2D      更新时间:2023-10-16

我的游戏中有两个身体,我声明如下:

b2Body* actor;
b2Body* brick;

它们都是CCD_ 1体。这里的fixture声明如下:

b2FixtureDef actorFixture;
b2FixtureDef brickFixture;

现在我正在努力获得碰撞的信息,我想确认他们是否都碰撞了。我以为我可以通过比较GetFixture()中的两个物体的夹具与BeginContact中的actorFixture和brickFixture来做到这一点,但我发现不能这样做!如果我的问题很愚蠢,我很抱歉,但我正在学习碰撞检测,发现它真的很难。我读了关于它的文章,但我的逻辑仍然不清楚。你能帮我让我知道我如何才能实现上面提到的目标吗?

在开始联系时,我想要这样的东西:

void Callback::BeginContact(b2Contact* contact)
{
std::cout << "Begin Contact" << std::endl;
b2Body* bodyA = contact->GetFixtureA()->GetBody();
b2Body* bodyB = contact->GetFixtureB()->GetBody();
if((bodyA==actorFixture||bodyB==brickFixture)
        &&   (bodyA==brickFixture||bodyB=actorFixture))
    score++

}

您正在将一个物体与夹具进行比较,这两个物体永远不会相等。您应该将给定的实体指针与actor和实体指针进行比较:

if((bodyA==actor && bodyB==brick)
        ||   (bodyA==brick&& bodyB=actor))
    score++
}

注意,我还更改了条件,使body A等于actor bodybody B等于brick body,或者反过来。否则,该条件将永远不会满足,因为body A(或body B)不能同时是b2PolygonShape0和brick body