2016-12-04 4 views
1

私は趣味のゲームエンジンに取り組んでいます、と私は現在、これらのクラスがあります:私は追加するとオブジェクト階層の実装

  • :(簡体字)

    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; 

私は「木を通過する」方法は、両方の状況で優れていることを感じます。

答えて

2

最初の質問 アレイの唯一の用途がオブジェクトを反復処理している場合は、それは冗長だと言います。配列へのインデックスに何らかの意味があり、特定のオブジェクトにすばやくアクセスできる場合は、いくつかの利点があります。

第2の質問 私は、可変クラスの静的変数を完全にはっきりさせています。彼らは本質的にグローバルと同等です。

関連する問題