我一直試圖在上週解決這個問題,並且似乎無法找到一個既不需要單例也不需要緊耦合的解決方案。 我正在開發一個3D空間遊戲,其中的早期演示是在這裏...
www.sugarspook.com/darkmatters/demo.html
...我正在開始添加任務玩家將能夠從擡頭顯示器(Hud class)中進行選擇。如何避免緊耦合?
遊戲的結構是:
Game類包含Hud和ObjectsList類。
ObjectsList類包含各種遊戲對象,包括玩家,各種船舶,行星和軌道(空間站)。
當玩家進入軌道的某個距離內時,任務被實例化。
任務被添加到一個MissionsList類中,它本身在ObjectsList中。
任務可能變得不可用,並且在沒有警告的情況下過期(就像他們被另一個飛行員選中一樣),因此Hud上顯示的列表是動態的並且會定期更新。
此前我有任務派遣事件直到遊戲,這反過來告訴Hud的變化。這對我來說似乎有點笨拙,因爲Hud有各種更深層次的信息需要傳遞給它。我最終在整個連鎖過程中擁有許多相同的功能。
我正在考慮的解決方案是將對MissionsList類的引用注入Hud,使其能夠偵聽Missonslist的更新。我聽說把事情的狀態和它的顯示混合起來是不好的做法,但是我不知道如何讓「活」的任務清單到達Hud。相比之下,如果Hud僅包含顯示細節而不參考生成這些細節的任務對象,則當玩家從Hud選擇任務時,如何確定選擇了哪個任務? 在這種情況下緊耦合是否正常?或者我應該使用單身人士與Hud溝通? 如果我所建議的任何事情都有根本性的錯誤,歡迎告訴我什麼是什麼,什麼是最好的解決方案。 謝謝。
感謝您的回覆。這聽起來很有用,但我不太喜歡'在你的DI ...'部分,對不起。這對一些人來說可能是顯而易見的,但'DI'是什麼?謝謝。 – moosefetcher 2013-02-28 15:12:52
依賴注入。一旦你獲得了燈泡的時刻,它真的很棒。 Google:控制反轉。 Actionscript DI:http://www.adobe.com/devnet/flex/articles/dependency_injection.html – 2013-02-28 15:17:10
再次感謝。我記得前一段時間讀到的。看起來我有更多的閱讀要做。 – moosefetcher 2013-02-28 15:37:30