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

所以我想在我的opengl游戏引擎中使用子弹物理库进行碰撞检测。

我不想做任何复杂的事情,我只想知道什么时候事情在三维世界中碰撞。 我只使用盒子形状,并且我没有兴趣使用物理学来移动物体(我甚至禁用了刚体的碰撞响应)。

我设法使碰撞工作如下:

  • 首先,每帧我更新基于它所附的实体变换的刚体世界变换。 例如,我将我的玩家向右移动,刚体(和边界框)随我移动。

  • 我正在检查2个对象是否使用此代码进行碰撞:

    void PhysicsManager::myTickCallback(btDynamicsWorld *world, btScalar timeStep)
    {
        int numManifolds = world->getDispatcher()->getNumManifolds();
        if (numManifolds > 0)
            cout << "COLLISION" << endl;
    }
    
  • myTickCallback是动态世界的内部tick回调函数:dynamicsWorld-> setInternalTickCallback(myTickCallback);

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

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

    这可能是我尝试创建的游戏中的一个问题,因为我希望玩家能够被射弹击中,并且如果他在一段时间后停止击球,这是不对的。

    感谢您的阅读,任何帮助将不胜感激。

    链接地址: http://www.djcxy.com/p/95479.html

    上一篇: Bullet physics stops collision after a while

    下一篇: Physics in video game, Apply torque on angular acceleration