terisのゲームを開発する私は、通常のMVCパターンを使用すると、コードが混乱する可能性があり、OpenGLがGLEWの下でどのように動作しているかによって、ビルドするのがかなり難しくなるとの結論に達しました。代わりに、私はもう少し理にかなってObserverパターンにも依存し、このきちんと修正、思い付いた、少なくとも短期的には(画像は完全なクラスツリーを反映していない):
このデザインの欠陥を解決するには?
説明するために:
-everyをボックスがクラスである場合、Engine
はEntities
のインスタンスを保持し、Game
はFigure
のインスタンスを保持します。
- Figure
は、Entity
を継承します。
- Engine
は、Game
を観測し、Game
は、オブザーバーによってFigures
と結合される。
それがどのように動作するかを
:
理想的には、私は、新しいスレッドで、図を作成します、Game
オブジェクトを作成し、ウィンドウを占めるようになる他のすべてと一緒にGLEWとGLFWを設定しますどのEngine
をインスタンス化する必要があり、描画ループを開始するようにエンジンに通知し、そのFigureが設定されたらObserverを介してEngine
へのオブジェクトポインタを渡します。
これはきれいに機能しますが、Entity
を継承してすべての種類の図を追加できます。すべての座標の更新がGame
を通過するため、数字が画面から消えず、おそらくすべての図にユニークなそれが必要ならば、シェーダ。図は、別のスレッドで呼び出され、ゲームが初期化され、
エンジンが初期化され、任意のOpenGLの機能にアクセスすることを求められたとき
atioglxx.dll: 0xC0000005: Access violation reading location 0x00000728.
スロー:
それは実際にどのように動作します。
Engine
ですべてのサポート機能が起動されていることをFigure
が知りません。そして、私はFigure
で再びそれをすることはできません。 Viewで行う必要があるすべてのものをEngine
に移動することはできますが、別のシェーダを設定することはできません。Engine
のすべてのFigureに対してVAO(Vertex Array Objects)を構築する必要があります。
できるだけ変更を加えずに、エラーをなくすにはどうすればよいですか?
これは興味深い問題であってもよいが、ここでオフトピックかもしれ。 – Walter
@Walter、私はそれをgamedev.stackに置くことを考えましたが、建築上の問題をあまり扱っていないようです –