SFML と OpenGL を使用して小さなゲームを作成することで、初心者の C++ スキルを練習しています。プログラミングの部分はおおむね順調に進んでいますが、実際のコード/クラスの設計について質問があります。
ゲーム ループを含み、イベント、グラフィックス、コマンド、ゲーム、および UI の各クラスのインスタンスを 1 つずつ所有する MainLoop という 1 つのクラスがあります。私は当初、それらすべてを 1 つのクラス (異なる .cpp ファイルに分割された関数を持つ) にしたいと考えていましたが、OOP/C++ のアプローチが間違っていると言われました。ただし、それらを分離することで良い面(カプセル化、モジュール性、デバッグ)を見ることができますが、多くの悪い面にも遭遇しているようです. ユーザーが UI ボタンを押す例を見てみましょう。
まず、MainLoop は SFML のウィンドウ クラスからイベントを取得します。MainLoop はそれを独自の Event クラスに送信します。イベント クラスはイベントを解釈し、それを UI クラスに送信して、ボタンのいずれかが「ヒット」したかどうかを確認します。true の場合、UI クラスは、ボタン コマンドを解釈する Command クラスにそれを送信します。そして最後に、コマンド クラスはそれを Game クラスまたはその他の必要な場所に送信します。
それはすべて私にとって非常に手間がかかるように思えます。また、少なくとも現在私が行っている方法では、多くの前方宣言が必要でした(そして、それらについて学ぶ前に、大量の循環依存関係が発生しました) . 私はそれがパフォーマンスに良い影響を与えるとは思えません。
とにかく、私が見逃しているトリックはありますか?これらのクラスをどのように接続し、どのように通信する必要がありますか? たとえば、Event クラスから UI クラスにコマンドを転送するにはどうすればよいですか? どこにでも前方宣言、インクルードなどを入れる必要がありますか?それはモジュール性を台無しにしませんか? MainLoop クラスをすべて実行し、代わりに宣言を必要としない整数/浮動小数点数/文字を使用して戻り値を転送する必要がありますか? 私はここでちょっと途方に暮れています。