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

标签 c++ box2d game-engine collision subclassing

我正在用 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/

相关文章:

java - 无法加载目标 : Windows 7, 32 位的共享库 'gdx-box2d.dll'

objective-c - 有没有办法将 b2Body 转换为 Objective-C 对象

c++ - 如何调用 header 包含的函数?

c++ - 基于 bool 模板参数的启用方法

c++ - 打印出指针列表

c++ - 不理解这些 C++ box2d 错误

c++ - 游戏开发-更新方法和状态模式

c++ - BST的节点值如何从高到低输出?

c++ - 或无效 C++ : why does this code compile?

java - MVC-听起来是 View 还是模型?