1

簡単なプログラムを書きたい。

1 つのシーン、1 つのカメラ、および特定の 3D オブジェクトがあります。これを実装する方法はわかっていますが、それは問題ではありません。問題は、OOP の原則でどのように設計するかです。カメラのクラスと3Dオブジェクトのクラスを作る予定です。

私の質問は、Draw メソッドを実装しているのは誰ですか? カメラは draw メソッドを実装する必要があると思います。カメラは BasicEffect と RasterizerState インスタンスを合成し、Update メソッドと Draw メソッドを実装します。また、3D オブジェクトがカメラの状態と設定を取得して自分自身を描画するか、3D オブジェクトの頂点とカメラの設定と状態を取得してすべてのものを描画するサードパーティ クラスが存在することも考えました。では、正しい OOP 設計とは何でしょうか?

4

2 に答える 2

3

間違った質問をしている可能性があると思います。

ほとんどの場合、ゲーム開発中に「適切な OOP 原則」が思い浮かびません。確かに、ゲームプレイのコードを書くとき、物事をクラスに分割する方法はかなり明白であり、「カプセル化とすべてのジャズ」を 100% 完璧にすることはそれほど大したことではありません。

ゲーム開発における「伝統的な」アプローチは、最も単純な方法として、仮想メソッドとメソッドを持つ基本クラス (例: GameObjector ) を持つことです。次に、その基本クラスから継承し、必要に応じてそれらのメソッドをオーバーライドする、ゲーム内の各種類のオブジェクトのクラス。ActorDrawUpdate

次に、これらのクラスのインスタンスをゲーム クラスのリストに貼り付けるだけです。これをループして、各インスタンスでそれぞれのメソッドを呼び出しますGame.DrawGame.Update

Drawと以外のメソッドを追加することを検討することもできますUpdateLoadContentが良い例です。

このクラスDrawableGameComponentは、このアーキテクチャの良い例です (リストとしてビルトインを使用していることに注意してくださいGame.Components)。個人的には、XNA のコンポーネント アーキテクチャを使用することはお勧めしません (独自のアプローチを推奨します)。しかし、Draw/を見たことがない場合Updateは、一見の価値があります。

カメラ オブジェクトを扱うには、draw メソッドのシグネチャを次のようにすることをお勧めします。

public virtual void Draw(Camera camera)

そうすれば、すべてのゲーム オブジェクトがカメラにアクセスし、自分自身を描画する方法を知ることができます。(これは では不可能であることに注意してくださいDrawableGameComponent。)

可能なゲームアーキテクチャを説明するこの回答を確認することを強くお勧めします-複雑さが増しています。特に、「アクター クラス」アプローチと、さまざまなアクターがどのように相互作用するかについて詳しく説明します。

于 2012-06-17T08:16:50.620 に答える
1

あなたの質問はかなり広いです。Microsoft App Hubでサンプルを確認できます。多くの基本的なサンプルと、Ship Gameやその他のフル ゲームなどのより高度なサンプルがいくつかあります。それはあなたに考えるためのいくつかのアイデアを与えることができます.

于 2012-06-16T17:28:49.707 に答える