7
ゲームオブジェクトがC ++で誤って削除されるのを防ぐ方法
私のゲームには、プレイヤーで神風が爆発するモンスターがいるとしましょう。このモンスターの名前をランダムに選んでみましょう:クリーパー。そのため、Creeperクラスには次のようなメソッドがあります。 void Creeper::kamikaze() { EventSystem::postEvent(ENTITY_DEATH, this); Explosion* e = new Explosion; e->setLocation(this->location()); this->world->addEntity(e); } イベントはキューに入れられず、すぐにディスパッチされます。これにより、Creeperの呼び出し内のどこかでオブジェクトが削除されますpostEvent。このようなもの: void World::handleEvent(int type, void* context) { if(type == ENTITY_DEATH){ Entity* ent = dynamic_cast<Entity*>(context); removeEntity(ent); delete ent; } } Creeperオブジェクトはkamikazeメソッドの実行中に削除されるため、にアクセスしようとするとクラッシュしますthis->location()。 1つの解決策は、イベントをバッファにキューイングし、後でそれらをディスパッチすることです。それはC ++ゲームの一般的なソリューションですか?それはちょっとしたハックのように感じますが、それは異なるメモリ管理プラクティスを持つ他の言語での私の経験のためかもしれません。 C ++では、オブジェクトがそのメソッドの1つから誤って自分自身を削除するこの問題に対するより一般的な解決策はありますか?
20
c++
scene-graph