私のゲームプロジェクトでは、私はMVCスキームを使用しています。モデルとビューは完全に分離されています。ビューはオブザーバパターンによって駆動されます。ゲームエンティティ(作成、破棄、更新、...)で何かが起こると、リスナーからその旨が通知されます。モデルの新しいエンティティが割り当てられるとき、私は適切なviewmodel(EntityMesh)を作成する必要があります。viewmodelの "翻訳"と継承のC++ MVCモデル
- EntityMeshはのviewmodel
- ゲームのための基本である::エンティティは、この例のモデルの導出木のモデル
のベースは、次のようになります:
- ゲーム::エンティティ - >ゲーム:: PhysicalEntity - >ゲーム:: PhysicalGridEntity
- ゲーム::エンティティ - >ゲーム:: ActorEntity - >ゲーム:: FreeActorEntity
これは私が現在この問題を "解決"する方法ですが、将来的にはGame + EntityとEntityMeshの30以上の派生を期待しています。これは非常に醜い非OOPデザインです。
EntityMesh* WorldView::_translate(Game::Entity* const ent)
{
//TODO: finish translator...
std::cout << "TRANSLATING!: " << typeid(ent).name() << std::endl;
Game::PhysicalGridEntity* pgent = dynamic_cast<Game::PhysicalGridEntity*>(ent);
if(pgent)
{
std::cout << "CREATING: PhysicalGridEntity" << std::endl;
return new PhysicalGridEntityMesh(this, pgent);
}
else
{
Game::PhysicalEntity* pent = dynamic_cast<Game::PhysicalEntity*>(ent);
if(pent)
{
std::cout << "CREATING: PhysicalEntity" << std::endl;
return new PhysicalEntityMesh(this, pent);
}
else
{
Game::FreeActorEntity* faent = dynamic_cast<Game::FreeActorEntity*>(ent);
if(faent)
{
std::cout << "CREATING: FreeActorEntity" << std::endl;
return new FreeActorEntityMesh(this, faent);
}
}
}
return NULL;
};
これをもっと明確にする方法とOOPを混合することなくどのようにするか考えてみましょう。
EDIT:何パターンは、使用する任意のヒントは、すべての:)
ビジターパターンの使用はどうですか? –