1

まず、私の質問は、ゲーム開発よりも優れたオブジェクト指向システムの設計に関するものです。弾丸、敵、大きな岩、宇宙船(プレイヤー)などのオブジェクトを使用して、スペースシューターゲームを作成しています。フレームごとに衝突をチェックする衝突マネージャー(静的クラス)があります。弾丸から宇宙船または敵に「効果」を渡すために、私はこれを行いました:

Interface IHit
{
   Action<BaseGameSprite> GetEffect();
}

*たとえば、私が行った弾丸クラスでは:

 return new Action<ICollisionInterest>(gameobject =>
                {
                    gameobject.LifePoints -= Damage;


                });

衝突マネージャーで、衝突が見つかった場合:

TheHitObject.GetEffect()(HittenObject);

解決策は機能しますが、GetEffect() がカプセル化を完全に破り、弾丸が HittenObject (宇宙船、または敵) に対してやりたいことを何でもできるように見えるため、それが良い設計であるかどうかはわかりません。私の質問は次のとおりです。良いデザイン?または私は別のものを使用する必要がありますか?

4

2 に答える 2

2

私見ですが、オブジェクト指向のデザインに関する限り、デザインは問題ないと思います。弾丸オブジェクトが命中したオブジェクトに対して何をしてもよいと決定するのがゲーム ロジックである場合、そうしない理由はありません。あなたがリストしたサンプルコードでは、異なるクラス間の密接な結合は見られませんでした.メソッドは、 hasプロパティを必要とすることを除いて、具体的なクラスについてGetEffect()仮定を行いませんでした.しかし、このプロパティ。gameobjectLifePointsifgamobject

于 2013-03-29T17:35:30.587 に答える
1

エンティティシステムをチェックアウトしましたか? http://entity-systems.wikidot.com/

ゲーム開発の従来のオブジェクト指向設計よりも優れたアーキテクチャを促進します。エンティティ システムでは、すべてのゲーム オブジェクトは単なる ID であるエンティティとして表されます。レンダリング、衝突検出、ヘルスの計算などの動作は、エンティティにカプセル化されず、エンティティに追加できるコンポーネントとして表されます。実際のレンダリング、物理、ヘルス ポイントの計算などは、独立したサブシステムによって処理されます。各サブシステムは、同じ種類のコンポーネントをすべて処理し、それらが属するエンティティを無視します。このように、レンダリング、ロジック、フィジックス、AI が明確に分離されています。

エンティティ システムの学習を開始するには、T=Machine によって書かれた古典的な 3 部構成の記事をチェックしてください。 http://t-machine.org/index.php/2007/09/03/entity-systems-are-the-future-of-mmog-development-part-1/ (part2とpart3はググってください)

于 2013-03-29T05:45:56.620 に答える