Box2D碰撞回调

时间:2013-11-19 14:50:11

标签: c++ opengl box2d collision-detection

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

b2Body* actor;
b2Body* brick;

它们都是b2PolygonShape个身体。夹具声明如下:

b2FixtureDef actorFixture;
b2FixtureDef brickFixture;

现在我正在尝试获取碰撞信息,我想确认它们是否相互碰撞。我认为我可以通过GetFixture()BeginContact中的actorFixture和brickFixture比较两个物体的固定物来做到这一点,但我发现它不能这样做!我很抱歉,如果我的问题是愚蠢的,但我正在学习碰撞检测并发现它非常困难。我阅读了有关它的文章,但我的逻辑还不清楚。你能帮我告诉我怎样才能实现我上面提到的目标?

在beginContact中我想要这样的东西:

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++

}

1 个答案:

答案 0 :(得分:1)

你正在比较一个永远不会相等的身体。 您应该将给定的body指针与actor和brick body指针进行比较:

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

请注意,我也更改了条件,因此body A等于actor bodybody B等于brick body或反过来。否则,由于body A(或body B)不能同时为actor bodybrick body

,因此永远不会满足条件