2012-01-14 2 views
0

Unix(X11のグラフィックスコンテキストを使用)とWindows(WindowのGDIを使用)の両方で理想的に動作するような簡単なゲームを実装しています両方のウィンドウマネージャー。コードを構造化するための最良の方法は何でしょうか?私は単に正しいC++クラスをプラグインして各OSで動作させることができますか?X11とWin32用のシンプルなゲームのコードを整理する最良の方法

具体的には、実際のゲームコンポーネントからグラフィックス&ウィンドウコンポーネントを完全に分離するにはどうすればよいですか? (例えば、ゲームコンポーネントがユーザ入力のためにプラットフォーム特有のウィンドウコンポーネントを観察し、スプライトをロード/表示するための共通インタフェースを作成し、再描画のための別の共通インタフェースを作成するなどのように、オブザーバパターンを使用する)。各オブジェクトのグラフィックス/デバイスコンテキストをコピーしてメイン画面のgc/dcに貼り付ける責任は誰にありますか?どのコンポーネントにメインイベントループ/ウィンドウコールバックが含まれるべきか(メインコンポーネントの場合は、各プラットフォームに2つのバージョンのメインコンポーネントが必要ですか?)また、各オブジェクト(ブロック、文字など)データ型(X11ではgc、GDIではDC)?

2つの基本的な要件は、私はX11とGDIのみを使用でき、マルチスレッド化できないことです。

+2

ウィンドウシステム?それはマルチスレッドではありませんか?私は参照してください... – corsiKa

+0

なぜブロックや文字がデバイスコンテキストを格納する必要がありますか?とにかくSDLを考えましたか? –

+0

@BenVoigt私にこれを教えてください。私は実際にどのコンポーネントが実際に各スプライトのgc/dcを保持すべきかも分かりません。グラフィックスマネージャに渡すオブジェクトごとにロードされたgc/dcを返すリソースマネージャが必要ですか?グラフィックマネージャはそれをコピーしてメインスクリーンgc/dcに貼り付けますか? XlibとGDI以外のライブラリを使用することはできません。 – JosephH

答えて

2

ゲームは本質的にプラットフォームに依存します。単純なゲームはGLUTで作ることができ、#definesを使ってコードの2つのバージョンを維持することは非常に簡単です。コールバックはGLUTによって処理されます。

このように、GLUTでは、WindowsとLinuxでほぼ同じコードを書くことができます。 (コンテキスト作成などの問題は既にGLUTによって処理されているため)。

あなたのプロジェクトが明示的にGLUTを書き直さなければならない限り、それに固執してゲームを書くことをお勧めします。

+0

これはプラットフォーム依存の質問ではなく、むしろOOPの質問です。私は、Windowing/Rendering/User Input Handlingコンポーネントを切り離して、すべての作業を行うために単一のライブラリ(XlibまたはGDI)に頼らざるを得ないときにOOコードを書くのは本当に難しいことです。 – JosephH

+0

GLUTを書いた人はすでにキーボード入力のような機能を書いていました。このようにして、GDIやXlibなどのシステム固有のライブラリに触れる必要はありません。 GLUTで作業していた人は、すでにそれを理解しているので、C++でのコーディングとOpenGLレンダリングルーチンの作成に集中することができます。 – Mikhail

+0

私はそれを利益を上げるためにこのゲームを書いているのではなく、最小限のライブラリが与えられたオブジェクト指向(OO)の方法でコンポーネントを整理する方法を学ぶだけです。私は、すべてのファンシーライブラリを使用すれば、人生が楽になり、より良いゲームを作ることができると私は理解しますが、それはここでの私の目的ではありません。 – JosephH

関連する問題