私はActionScriptでゲームを書いています。そこでは、ショットで「ヒット可能」であるはずの複数のクラスがあります。
他のすべてのゲーム内エンティティが継承する最も一般的なクラスはCombatObjectです。CombatShip、CombatAsteroid、その他のさまざまなクラスがそれを継承しています。CombatAiクラスとCombatPlayerクラスはどちらもCombatShipから継承しています。
ここで、CombatAi、CombatPlayer、およびCombatAsteroidをショットでヒット可能にしたいのですが、それらに継承させたくありません(後で、ヒットできないはずのCombatShipがある可能性があります)。
私のアイデアは、これら3つにインターフェイスIHitableを実装して、ショットと衝突したときにif(hitObject is IHitable)
、ショットを破壊してダメージを与えるように依頼できるようにすることでした。
さて、問題は、これらのクラスのそれぞれを持つことが最善でしょうか?
- ダメージを受けるために必要なすべてのコードを実装する(シールドのチェック、ダメージ率の計算など)
- それらすべてにクラスのインスタンスを所有させ、すべての損傷関連機能を処理するクラスを返す
DamageManager
関数を実装しますgetDamageManager():DamageManager
- (2.)の欠点の1つは、各CombatShip、CombatAsteroidなどがDamageManagerのインスタンスを所有している必要があることです。DamageManagerをシングルトンにして、船とそれに与えられたショットへの参照を持ち、残りを処理させる方がおそらくさらに良いでしょうか?