2017-12-02 3 views
0

Ich arbeite an Java-App mit MVC Designmuster und jetzt möchte ich ein paar Sounds spielen. Wo sollte ich Audio-Sounds zum Abspielen mit Code einfügen? Auf welche Schicht von MVC?Wohin mit Sounds im MVC Java-Spiel?

Einige der Sounds sollten abgespielt werden, nachdem ein Benutzer eine Taste gedrückt hat, so dass es gut wäre, sie in den Controller aufzunehmen. Einige Sounds werden jedoch nach einiger Zeit und ohne Benutzerinteraktion abgespielt, wo nur Model von dieser Änderung weiß. Aber Sounds in Model klingen klingt für mich wie eine schlechte Idee ... Wie kann es gelöst werden?

+0

Sie meinen Sound-Dateien selbst? Oder Logik, die das Klangspiel steuert? –

+0

Logik, Code selbst :) –

Antwort

0

Sound Play ist etwas abseits von MVC-Muster.

Es hat einige Ähnlichkeiten mit View von MVC, da es auch einige Informationen für einen Benutzer bereitstellt. Aber es ist einfacher. Das Soundmodul kann keine Benutzereingaben verarbeiten, daher ist kein Controller erforderlich.

Ich würde Ihnen empfehlen, implementieren Sie das Soundmodul unter Anwendung Observer pattern. Ihr Modell generiert Ereignisse, und das Soundmodul abonniert diese Ereignisse. Es wird genauso wie das View-Modul abonniert.

Lassen Sie mich Ihnen ein Beispiel geben. Nehmen wir an, Sie haben einen Spieler, der eine Waffe schließt. Intern wird Ihr Modell sagen ShutGunEvent. View und Sound werden für diese Veranstaltung abonniert. View wird fliegende Kugel zeichnen und Sound wird Schusssound spielen.

+0

Interessante Idee, danke. Aber wie soll ich einen bestimmten Beobachter benachrichtigen? Weil ich jetzt Ansichten vom Modell mit 'this.notifyObservers()' benachrichtige. Ich möchte die Anzeige jedes Mal anzeigen, wenn das Modell geändert wird, aber ich möchte in einigen Fällen nur das Soundmodul benachrichtigen. –

+0

Sie meinen, dass Sie bei jeder Änderung des Modells alle Ansichtsobjekte gleichzeitig benachrichtigen? Es ist besser, Ihre Modellobjekte so zu organisieren, dass ihre Änderungen nur einen bestimmten Teil der Ansicht beeinflussen. Auf diese Weise wird jedes Modellobjekt verschiedene Beobachter haben. In diesem Modell werden Ihre Klangbeobachter genau gleich behandelt. Z.B. Im Falle einer Schusswaffe müssen Sie nur Schuss- und Schusswaffenansicht ändern. Sie müssen die Menüzeile nicht neu rendern, damit die Menüansicht keine Ereignisse erhalten kann. –