Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 碰撞后移除物体(子弹物理)_C++_Physics_Collision_Bullet - Fatal编程技术网

C++ 碰撞后移除物体(子弹物理)

C++ 碰撞后移除物体(子弹物理),c++,physics,collision,bullet,C++,Physics,Collision,Bullet,对于碰撞检测,我有如下设置: struct ZombieBulletCallback : public btCollisionWorld::ContactResultCallback { ZombieBulletCallback(BulletStuff* ptr) : bullet(ptr) {} btScalar addSingleResult(btManifoldPoint& cp, const btCollisionObjectWrapper*

对于碰撞检测,我有如下设置:

struct ZombieBulletCallback : public btCollisionWorld::ContactResultCallback
  {
     ZombieBulletCallback(BulletStuff* ptr) : bullet(ptr) {}

     btScalar addSingleResult(btManifoldPoint& cp,
     const btCollisionObjectWrapper* colObj0Wrap,
     int partId0,
     int index0,
     const btCollisionObjectWrapper* colObj1Wrap,
     int partId1,
     int index1)
     {
        // your callback code here
        char strr[256];
        sprintf_s(strr, "zombie-bullet collision \n");
        OutputDebugString(strr);

        // increment points
        bullet->currentPoints += 10;

        // increase the kill counter
        bullet->killCounter += 1;

        // TODO remove bodies

        return 1.f;
     }

     BulletStuff* bullet;
  };

  ZombieBulletCallback zombieBulletCollision(this);

  for (int i = 0; i < zombies.size(); i++) {
     for (int j = 0; j < bullets.size(); j++) {
         bt_dynamicsWorld->contactPairTest(zombies[i], bullets[j], zombieBulletCollision);
     }
  }
但这会产生一个错误:const btCollisionObject*类型的参数与btCollisionObject*类型的参数不兼容*


如何从世界上删除这两个实体?

导致不兼容的差异是const btCollisionObject*的const限定符

我从来没有尝试过在碰撞或任何分派过程中移除物体,我怀疑它是否能完美地工作

由于您正在进行手动接触测试,因此可以尝试使用const_cast操作符删除碰撞对象:bullet->bt_dynamicsWorld->removeCollisionObject const_castcolobject0wrap->getCollisionObject;但是,现在,或者在更改模拟步骤之后,强制执行可能无法正常工作


相反,我会通过ContactResultCallback将“死亡”僵尸收集到另一个容器中。失败的僵尸将延迟从bt_dynamicsWorld和模拟步骤结束时的僵尸中删除,或者分别从您的嵌套循环中删除。

导致不兼容的差异是const btCollisionObject*的const限定符

我从来没有尝试过在碰撞或任何分派过程中移除物体,我怀疑它是否能完美地工作

由于您正在进行手动接触测试,因此可以尝试使用const_cast操作符删除碰撞对象:bullet->bt_dynamicsWorld->removeCollisionObject const_castcolobject0wrap->getCollisionObject;但是,现在,或者在更改模拟步骤之后,强制执行可能无法正常工作


相反,我会通过ContactResultCallback将“死亡”僵尸收集到另一个容器中击败僵尸,以便在模拟步骤结束时从bt_dynamicsWorld和僵尸中延迟删除,或分别从您的嵌套循环中删除。

目前我将使用第一个建议,由于项目的最后期限是明天,它似乎工作得很好。然而,第二个建议更有意义。目前,我将使用第一个建议,因为项目截止日期是明天,它似乎工作得很好。然而,第二种方法更有意义。
bullet->bt_dynamicsWorld->removeCollisionObject(colObj0Wrap->getCollisionObject());