我在ActionScript中編寫了一個遊戲,其中我有多個類應該是「可以」通過鏡頭。如何在AS3中爲多個類提供沒有繼承的附加功能?
所有其他遊戲中實體繼承的最通用的類是CombatObject; CombatShip,CombatAsteroid和其他類繼承它。 CombatAi和CombatPlayer類都從CombatShip繼承。
現在我想通過鏡頭製作CombatAi,CombatPlayer和CombatAsteroid,但我不希望它們繼承它(稍後可能會有CombatShips應該不可用)。
我現在的想法是讓這三個實現一個Interface,IHitable,以便當它們與鏡頭相撞時,我可以詢問if(hitObject is IHitable)
,如果屬實,那麼鏡頭就會被破壞並造成傷害。
現在的問題是,這將是最好有每種這些類
- 實現所有需要的代碼,以損害(例如檢查護罩,計算損傷百分比等)自身
- 的讓他們擁有一個類
DamageManager
的實例,並實現一個函數getDamageManager():DamageManager
,返回一個處理所有傷害相關功能的類 - (2)的一個缺點是每個CombatShip,CombatAsteroid等都必須擁有一個DamageManager實例。讓DamageManager成爲一個Singleton並且僅僅提供給船隻和給予它的射擊並讓它處理其餘部分會更好嗎?
你完全正確的封裝,這看起來很不好,我從來沒有注意到。你關於stat對象的想法很有趣:所以你的想法是你想操作多個「hitee」值但你不想傳遞一個引用給自己(比如直接操作),所以你使用一個stat對象作爲容器來回傳遞信息並保持封裝完好?另一個問題:這是返回多個值時的最佳實踐嗎? – 2010-10-30 14:17:35
是的,這正是它。對於其他問題,我不確定是否有另一種方法返回多個值,而不是返回帶有這些值的對象,至少在AS3中。 – subb 2010-10-30 16:37:25