2011-08-03 4 views
3

私は小さなゲームエンジンで作業していますが、問題が発生しました。ゲームエンジンを整理する方法

これまでのところ、私はWin32ウィンドウのラッパーであるウィンドウクラスを持っています。私はまた、ウィンドウの作成とウィンドウメッセージの処理を管理するウィンドウマネージャクラス(シングルトンクラス)を持っています。私はエンジンクラスを持っています。エンジンクラスは、これまでのエンジンクラスと同様に、最も重要なクラスです。このエンジンクラスには、メインループ、direct3dデバイス、およびそれを作成および破棄するコードが含まれています。このエンジンクラスには、direct3dデバイスのメイン/ホストウィンドウとして機能するWindowクラスオブジェクトも含まれています。

私の問題は、いくつかのウィンドウメッセージ(WM_SIZEやWM_ACTIVATEAPPなど)に反応する必要がありますが、メッセージハンドラはEngineクラスの下の「レベル」であるWidnowクラスの一部です。私はまた、エンジンのレンダリング/グラフィックスをカプセル化する別のクラスを作成し、そのクラスをメインエンジンクラスに追加する必要があると思います。

私は、Windowクラスの中にGraphicsクラスを持っているか、Graphicsクラスの中にWindowクラスを持っているべきか、Main Engineクラスの中に並べて持っているべきかどうかはわかりません。

+0

他の人が理解できるように、クラス構造をより明確に視覚的(擬似コード)にすることをお勧めします。 – gahooa

+0

に属しますgamedev.stackexchange.com – Puppy

答えて

4

あなたはイベント駆動の世界に住んでいるので、イベントを使用してください。あなたのウィンドウラッパーは、ゲームエンジンがフックして反応できるイベントを提供します。

+0

にオブザーバーのパターンのように? – Zayats

+0

はい、正確です。そして、これは単にウィンドウに関連するだけではなく、フォロワーがメインの人の後ろを歩いているような、あらゆるエンティティ間の通信にイベントを使用することができます。それと工場のパターン(メディアの読み込み、保存、アクセス)はあなたを遠ざけます! – Blindy

+0

私はそれを試して効果的です!ありがとう – Zayats

1

ゲームエンジンが基本となるオペレーティングシステムとエンジンオブジェクトの子とのやり取りを制御するオブジェクトを作成しないでください。 OS層はエンジンを駆動するべきであり、その逆ではない。

(ほとんどのエンジンやプログラマはちなみに、この間違ったを取得します。)

+0

他のすべてのクラスを制御するフレームワーククラスが必要ですか? – Zayats

+0

@ Zayats、 'Framework'クラスは何でしょうか? – MSN

+0

おそらく、グラフィックス、入力、タイミング、GUIなどに使用されるコンポーネントを含むクラスであり、これらのコンポーネントのすべてを初期化し、それらの間の通信を制御する責任があります。 – Zayats

1

あなたは今まで複数のWindowsを持っているのだろうか?ますます、マルチモニタは、さまざまなゲームでますます使用されています。

複数のグラフィックスを1つのウィンドウで実行しますか?かなりありそうもない。それは、WindowがGraphicsの中にあるべきであることを示唆しています。

+0

おかげさまで、実際にはそれについて考えると理にかなっていますが、複数のウィンドウに1つのデバイスを使用できますか? – Zayats

+0

@ザヤッツ:確かにできる。最高司令官のようないくつかのゲームはネイティブに2つのウィンドウをサポートします。 – Puppy

関連する問題