まず、私の質問は、ゲーム開発よりも優れたオブジェクト指向システムの設計に関するものです。弾丸、敵、大きな岩、宇宙船(プレイヤー)などのオブジェクトを使用して、スペースシューターゲームを作成しています。フレームごとに衝突をチェックする衝突マネージャー(静的クラス)があります。弾丸から宇宙船または敵に「効果」を渡すために、私はこれを行いました:
Interface IHit
{
Action<BaseGameSprite> GetEffect();
}
*たとえば、私が行った弾丸クラスでは:
return new Action<ICollisionInterest>(gameobject =>
{
gameobject.LifePoints -= Damage;
});
衝突マネージャーで、衝突が見つかった場合:
TheHitObject.GetEffect()(HittenObject);
解決策は機能しますが、GetEffect() がカプセル化を完全に破り、弾丸が HittenObject (宇宙船、または敵) に対してやりたいことを何でもできるように見えるため、それが良い設計であるかどうかはわかりません。私の質問は次のとおりです。良いデザイン?または私は別のものを使用する必要がありますか?