間違った質問をしている可能性があると思います。
ほとんどの場合、ゲーム開発中に「適切な OOP 原則」が思い浮かびません。確かに、ゲームプレイのコードを書くとき、物事をクラスに分割する方法はかなり明白であり、「カプセル化とすべてのジャズ」を 100% 完璧にすることはそれほど大したことではありません。
ゲーム開発における「伝統的な」アプローチは、最も単純な方法として、仮想メソッドとメソッドを持つ基本クラス (例: GameObject
or ) を持つことです。次に、その基本クラスから継承し、必要に応じてそれらのメソッドをオーバーライドする、ゲーム内の各種類のオブジェクトのクラス。Actor
Draw
Update
次に、これらのクラスのインスタンスをゲーム クラスのリストに貼り付けるだけです。これをループして、各インスタンスでそれぞれのメソッドを呼び出しますGame.Draw
。Game.Update
Draw
と以外のメソッドを追加することを検討することもできますUpdate
。LoadContent
が良い例です。
このクラスDrawableGameComponent
は、このアーキテクチャの良い例です (リストとしてビルトインを使用していることに注意してくださいGame.Components
)。個人的には、XNA のコンポーネント アーキテクチャを使用することはお勧めしません (独自のアプローチを推奨します)。しかし、Draw
/を見たことがない場合Update
は、一見の価値があります。
カメラ オブジェクトを扱うには、draw メソッドのシグネチャを次のようにすることをお勧めします。
public virtual void Draw(Camera camera)
そうすれば、すべてのゲーム オブジェクトがカメラにアクセスし、自分自身を描画する方法を知ることができます。(これは では不可能であることに注意してくださいDrawableGameComponent
。)
可能なゲームアーキテクチャを説明するこの回答を確認することを強くお勧めします-複雑さが増しています。特に、「アクター クラス」アプローチと、さまざまなアクターがどのように相互作用するかについて詳しく説明します。