衝突検出には次のような設定があります。
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 つのボディを世界から削除するにはどうすればよいですか?