2017-12-02 32 views
0

私はMVCデザインパターンを使用してJavaアプリケーションで作業していますが、今はいくつかのサウンドを再生したいと思います。コードを使って演奏するためのオーディオサウンドはどこに置くべきですか?どの層にMVCMVC Javaゲームで音を出す場所は?

ユーザーがキーを押した後でサウンドの一部を再生する必要があるため、コントローラーにそのサウンドを含めるとよいでしょう。しかし、いくつかのサウンドは、しばらくしてから、ユーザーの介入なしに再生され、Modelだけがこの変更について知っています。しかしモデルサウンドの音を私には悪い考えのように置いて...どのように解決することができますか?

+0

あなたはサウンドファイルそのものを意味していますか?またはサウンド再生を制御するロジック? –

+0

ロジック、コード自体:) –

答えて

0

サウンドプレイは、MVCパターンとは別のものです。

MVCからのビューとの類似点は、ユーザーにいくつかの情報も提供するためです。しかし、それはより簡単です。サウンドモジュールはユーザ入力を消費することができないので、コントローラは必要ありません。

には、Observer patternというサウンドモジュールを実装することをおすすめします。モデルはイベントを生成し、サウンドモジュールはそれらのイベントをサブスクライブします。これは、Viewモジュールとまったく同じ方法で購読されます。

例を挙げておきます。銃を閉めるプレイヤーがいるとしましょう。 内部的にモデルはShutGunEventと表示されます。 ViewとSoundの両方がこのイベントに登録されます。ビューは飛行弾を描画し、サウンドはガンショットサウンドを再生します。

+0

面白いアイデア、ありがとうございます。しかし、私はどのように特定のオブザーバーに通知する必要がありますか?今、 'this.notifyObservers()'を使ってモデルからビューを通知しています。モデルが変更されたときにいつでもビューに通知したいが、ちょうど場合によってはサウンドモジュールに通知したい。 –

+0

つまり、モデルの変更があるたびにすべてのビューオブジェクトに一度に通知するということですか?変更がビューの特定の部分にのみ影響するように、モデルオブジェクトを整理する方がよいでしょう。このようにして、すべてのモデルオブジェクトは異なるオブザーバセットを持ちます。そのようなモデルでは、健全なオブザーバーはまったく同じように扱われます。例えば。ガンショットの場合は、弾丸とガンビューだけを変更する必要があります。メニューバーにはイベントを受け取らないようにメニューラインを再レ​​ンダリングする必要はありません。 –