一段时间后,子弹物理会停止碰撞

时间:2018-03-05 21:41:26

标签: c++ physics bullet

我正试图在我的opengl游戏引擎中使用子弹物理库进行碰撞检测。

我不是想做任何复杂的事情,我只想知道事情何时在3D世界中发生碰撞。我只使用盒子形状,我没兴趣使用物理移动物体(我甚至禁用了刚体的碰撞响应)。

我设法让碰撞工作如下:

  • 首先,每个框架我根据附加的实体变换更新刚体世界变换。例如,我将我的播放器向右移动,刚体(和边界框)随我移动。

  • 我正在使用此代码检查2个对象是否发生冲突:

    void PhysicsManager::myTickCallback(btDynamicsWorld *world, btScalar timeStep)
    {
        int numManifolds = world->getDispatcher()->getNumManifolds();
        if (numManifolds > 0)
            cout << "COLLISION" << endl;
    }
    

myTickCallback是动态世界内部回拨回调:dynamicsWorld-&gt; setInternalTickCallback(myTickCallback);

现在奇怪的是,当我启动游戏时,我将我的播放器移动到我希望它碰撞的另一个对象上,它开始发送垃圾邮件。如果我将播放器留在对象上,它将继续发送垃圾邮件。但是,如果离开物体并多次返回它,过一会儿它就会停止写入碰撞。

我已经检查了刚体是否在移动(如果有碰撞响应)并且没有。

这可能是我试图创造的游戏中的一个问题,因为我希望玩家被投射物击中,如果他在一段时间后不再受到打击,那就不对了。

0 个答案:

没有答案