gpt4 book ai didi

c++ - 在 box2d 中实现 "begin contact"

转载 作者:行者123 更新时间:2023-11-30 03:33:14 24 4
gpt4 key购买 nike

我正在用 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();
}

所有这些都在我的主类(也包含大部分游戏变量)的更新函数中被调用。问题是我希望仅在两个对象 first 发生碰撞时调用代码,否则像 score++ 这样的东西会随着它的更新而最终值(value)暴涨碰撞持续时间。我知道 box2d 中有一个具有“开始接触”功能的“接触监听器”类,但是没有好的文档可以帮助初学者学习如何实现它。例如,如果我向我的主类添加一个联系人监听器,我如何让它处理我的分数,例如,如果联系人监听器无权访问这些变量?或者我首先在哪里称呼“开始联系”?对不起,如果这些是显而易见的问题,但我希望有人能澄清这些问题。提前谢谢你。

最佳答案

这里有一些建议,希望能回答您的问题:

  1. 看看Box2D C++ tutorials - Collision callbacks .就我个人而言,我认为这是一个关于使用 b2ContactListener 类的很棒的教程。
  2. 只需让包含分数信息的类继承自 b2ContactListener。这样您的 BeginContact 方法将可以直接访问 score 数据。大概那将是你的“主要”类(class)。一定要通知你的 b2World 实例通过调用你的世界实例的 SetContactListener 方法使用这个指针指向包含实例的分数(你从 b2ContactListener).

如果您在这方面仍需要更多帮助,请为此添加评论或更新您的问题以反射(reflect)尚不清楚的地方。

关于c++ - 在 box2d 中实现 "begin contact",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43129290/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com