我正在使用box2d进行游戏。我有以下代码:
for (int contact_num = 0; contact_num<contact_count; ++contact_num)
{
if (contact->IsTouching())
{
// get the colliding bodies
b2Body* bodyA = contact->GetFixtureA()->GetBody();
b2Body* bodyB = contact->GetFixtureB()->GetBody();
// check if one of the colliding objects is a censor
bool sensorA = contact->GetFixtureA()->IsSensor();
bool sensorB = contact->GetFixtureB()->IsSensor();
// do stuff, mainly handling variables
}
}
// Get next contact point
contact = contact->GetNext();
}
所有这些都是在我的主类的更新功能中调用的(它还包含大多数游戏变量)。问题是我希望仅在两个对象第一次发生碰撞时才调用代码,因为否则score++
之类的东西会在碰撞持续时间更新时最终飙升。我知道box2d中的“联系人监听器”类具有“开始联系”功能,但是没有好的文档可以帮助初学者学习如何实现它。例如,如果我将一个联系人监听器添加到我的主类,如何让它来处理我的分数,例如,如果联系人监听器无法访问这些变量?或者我在哪里首先称之为“开始接触”?对不起,如果这些是明显的问题,但我希望有人可以澄清这些。提前谢谢。
答案 0 :(得分:2)
这里有一些建议,希望能回答你的问题:
b2ContactListener
课程的好教程。b2ContactListener
。这样,您的BeginContact
方法就可以直接访问score
数据。据推测,这将是你的主要&#34;类。请务必通过调用您的世界实例的b2World
方法并通过指向包含实例的分数的指针(SetContactListener
实例来通知您的b2ContactListener
实例。{{1} }})。如果您仍需要更多帮助,请为此添加评论或更新您的问题以反映尚不清楚的内容。