在 box2d 中实现 "begin contact"
Implementing "begin contact" in box2d
我正在用 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();
}
所有这些都在我的主 class 的更新函数中调用(其中还包含大部分游戏变量)。问题是我希望代码仅在两个对象 first 发生碰撞时被调用,否则像 score++
这样的东西最终会随着它的更新而价值暴涨碰撞持续时间。我知道 box2d 中有一个 "contact listener" class 函数 "begin contact",但是没有好的文档可以帮助初学者学习如何实现它。例如,如果我向我的 main class 添加一个联系人侦听器,我如何让它处理我的分数,例如,如果联系人侦听器无权访问这些变量?或者我首先在哪里调用 "begin contact" ?对不起,如果这些是显而易见的问题,但我希望有人能澄清这些问题。提前谢谢你。
这里有一些建议,希望能回答您的问题:
- 看看Box2D C++ tutorials - Collision callbacks。就个人而言,我认为这是使用
b2ContactListener
class. 的很好的教程
- 只需让包含分数信息的class继承自
b2ContactListener
。这样,您的 BeginContact
方法将可以直接访问 score
数据。大概那将是你的 "main" class。一定要通知你的 b2World
实例使用它,方法是调用你的世界实例的 SetContactListener
方法,并带有指向包含实例的分数的指针(你从 [=10 子class编辑=]).
如果您在这方面仍需要更多帮助,请为此添加评论或更新您的问题以反映尚不清楚的地方。
我正在用 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();
}
所有这些都在我的主 class 的更新函数中调用(其中还包含大部分游戏变量)。问题是我希望代码仅在两个对象 first 发生碰撞时被调用,否则像 score++
这样的东西最终会随着它的更新而价值暴涨碰撞持续时间。我知道 box2d 中有一个 "contact listener" class 函数 "begin contact",但是没有好的文档可以帮助初学者学习如何实现它。例如,如果我向我的 main class 添加一个联系人侦听器,我如何让它处理我的分数,例如,如果联系人侦听器无权访问这些变量?或者我首先在哪里调用 "begin contact" ?对不起,如果这些是显而易见的问题,但我希望有人能澄清这些问题。提前谢谢你。
这里有一些建议,希望能回答您的问题:
- 看看Box2D C++ tutorials - Collision callbacks。就个人而言,我认为这是使用
b2ContactListener
class. 的很好的教程
- 只需让包含分数信息的class继承自
b2ContactListener
。这样,您的BeginContact
方法将可以直接访问score
数据。大概那将是你的 "main" class。一定要通知你的b2World
实例使用它,方法是调用你的世界实例的SetContactListener
方法,并带有指向包含实例的分数的指针(你从 [=10 子class编辑=]).
如果您在这方面仍需要更多帮助,请为此添加评论或更新您的问题以反映尚不清楚的地方。