2017-12-02 311 views
0

我正在使用MVC设计模式,现在我想播放一些声音。我应该在哪里使用代码播放音频声音? MVC的哪一层?MVC Java游戏中的声音放在哪里?

某些声音应该在用户按下某个键后播放,因此可以将其包含在控制器中。然而,一些声音只是在一段时间后才播放,没有用户交互,只有模型知道这种变化。但是,在模型中发出声音听起来像一个坏主意,所以...它如何解决?

+0

你是指声音文件本身?或控制声音播放的逻辑? –

+0

逻辑,代码本身:) –

回答

0

声音播放是站在MVC模式之外的东西。

它与MVC中的View有一些相似之处,因为它也向用户提供了一些信息。但它更简单。声音模块不能消耗用户输入,因此它不需要控制器。

我建议你到执行声音模块应用Observer pattern。您的模型生成事件,Sound模块订阅这些事件。它将以与查看模块完全相同的方式进行订阅。

让我给你举个例子。假设你有一名关闭枪的球员。 你的模型在内部会产生如ShutGunEvent。视图和声音都将订阅此事件。视图会画出飞行子弹,声音会弹起枪声。

+0

有趣的想法,谢谢。但是,我应该如何通知一位特定观察员?因为现在我使用'this.notifyObservers()'从模型中通知视图。我希望在模型改变时通知视图,但我想在某些情况下通知声音模块。 –

+0

哟,您是否意味着您在模型中的每次更改都立即通知所有视图对象?最好以他们的改变仅影响视图的特定部分的方式来组织你的模型对象。那样,每个模型对象都会有不同的观察者集合。在这样的模型中,你的观察者将以完全相同的方式处理。例如。在枪支枪的情况下,你只需要改变子弹和枪的视图。您不需要重新显示菜单行,菜单视图不应收到任何事件。 –