2017-12-02 14 views
0

我正在使用MVC設計模式,現在我想播放一些聲音。我應該在哪裏使用代碼播放音頻聲音? MVC的哪一層?MVC Java遊戲中的聲音放在哪裏?

某些聲音應該在用戶按下某個鍵後播放,因此可以將其包含在控制器中。然而,一些聲音只是在一段時間後才播放,沒有用戶交互,只有模型知道這種變化。但是,在模型中發出聲音聽起來像一個壞主意,所以...它如何解決?

+0

你是指聲音文件本身?或控制聲音播放的邏輯? –

+0

邏輯,代碼本身:) –

回答

0

聲音播放是站在MVC模式之外的東西。

它與MVC中的View有一些相似之處,因爲它也向用戶提供了一些信息。但它更簡單。聲音模塊不能消耗用戶輸入,因此它不需要控制器。

我建議你到執行聲音模塊應用Observer pattern。您的模型生成事件,Sound模塊訂閱這些事件。它將以與查看模塊完全相同的方式進行訂閱。

讓我給你舉個例子。假設你有一名關閉槍的球員。 你的模型在內部會產生如ShutGunEvent。視圖和聲音都將訂閱此事件。視圖會畫出飛行子彈,聲音會彈起槍聲。

+0

有趣的想法,謝謝。但是,我應該如何通知一位特定觀察員?因爲現在我使用'this.notifyObservers()'從模型中通知視圖。我希望在模型改變時通知視圖,但我想在某些情況下通知聲音模塊。 –

+0

喲,您是否意味着您在模型中的每次更改都立即通知所有視圖對象?最好以他們的改變僅影響視圖的特定部分的方式來組織你的模型對象。那樣,每個模型對象都會有不同的觀察者集合。在這樣的模型中,你的觀察者將以完全相同的方式處理。例如。在槍支槍的情況下,你只需要改變子彈和槍的視圖。您不需要重新顯示菜單行,菜單視圖不應收到任何事件。 –