1

私が扱っている設計上の問題について、誰かが私を助けてくれることを願っています。これは具体的にはゲーム開発の領域の問題ですが、おそらく受け入れられた方法で解決された、より広範な問題だと思います。私はPythonで働いています。

オブジェクトの位置 (およびその他の一般的な状態属性) を保持する GameObject クラスと、ゲーム世界全体に関する情報を保持する Engine オブジェクトへの参照があります。ゲームオブジェクトはさらに分類できます。具体的な形式では、VisibleGameObjects、PhysicalGameObjects (衝突可能)、またはその両方にすることができます。たとえば、物理的であるが目に見える表現を持たない、目に見えない境界を持つことができます。

VisibleGameObjects は、描画機能を処理する draw() メソッドを実装し、親の Engine 参照を通じてこれを委譲します。PhysicalGameObjects にはバウンディング ボックスがあり、衝突を処理するロジックを定義します。GameObject 属性 (加速度、速度など) へのアクセスも必要です。

問題は、VisibleGameObject と PhysicalGameObject (どちらも親 GameObject を共有する) の両方の動作を継承する必要がある具体的なオブジェクトを定義したい場合にどうなるかということです。このタイプの循環継承は非常に悪い考えだと私は理解しています。

これをリファクタリングして、親抽象クラスの状態に依存する具体的な子クラス (描画可能、衝突可能) に特定の動作を本質的にボルトで固定するにはどうすればよいですか?

編集: 私の 1 つの考えは、それらをゲーム オブジェクトの具体的なインスタンスにコンポーネントとして割り当て、is-a 関係よりも has-a 関係を優先することでした。ただし、それでもそれほどきれいには見えません。衝突可能なコンポーネントの「コンポーネント」リストを検索して、オブジェクトが衝突可能かどうかを確認しようとするのも、あまり良くないようです。

4

1 に答える 1