私は趣味のゲームエンジンに取り組んでいます、と私は現在、これらのクラスがあります:私は追加するとオブジェクト階層の実装
- :(簡体字)
class Scene { GameObject* m_root; GameObject*[] m_gameObjects[]; } class GameObject { GameObject* m_parent; GameObject*[] m_children; }
現在の実装をゲームオブジェクトをシーンに追加するには、m_rootの子として追加し、それをシーンのゲームオブジェクトの配列に追加します。
最初の質問:
- 私が言ったように私は簡単にそれらを反復処理できるよう、現在、私はまた、配列内のゲームオブジェクトのポインタを格納します。
この配列も維持する必要がありますか、しばらくの間ルートからツリーを抜けばよいですか?
どちらが標準的な使用に適していますか? (オブジェクトを検索する、すべてのオブジェクトの更新を呼び出すように、など)
2番目の質問:
がどのように私は、特定のゲームオブジェクトからルートにアクセスする必要がありますか?
私はルートを構築するときにGameObjectクラスに静的フィールドとしてルートを格納する必要がありますか?
親を持たないオブジェクトが見つかるまで、私は親を通過する必要がありますか?
私は親を経て何を意味:
GameObject* root = this;
while(root->GetParent() != null) {
root = root->GetParent();
}
return root;
私は「木を通過する」方法は、両方の状況で優れていることを感じます。