2

衝突検出には次のような設定があります。

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);
     }
  }

衝突が検出された後にボディを削除したい。

この構造体は、colObj0Wrap と colObj1Wrap (const btCollisionObjectWrapper* 型) にアクセスできます。これらは、衝突する 2 つのボディであると思います。私はこれを試しました:

bullet->bt_dynamicsWorld->removeCollisionObject(colObj0Wrap->getCollisionObject());

ただし、これによりエラーが発生します: タイプ const btCollisionObject* の引数は、タイプ btCollisionObject* のパラメーターと互換性がありません

これらの 2 つのボディを世界から削除するにはどうすればよいですか?

4

1 に答える 1