Zurück   Flashforum > Flash > ActionScript > Softwarearchitektur und Entwurfsmuster

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 12-10-2008, 19:27   #1 (permalink)
Developer
 
Benutzerbild von malthoff
 
Registriert seit: Sep 2001
Ort: Stuttgart
Beiträge: 519
Globale Soundsteuerung

Ich bin gerade dabei, meinem neuen Spiel die Soundsteuerung zu verpassen.
Da dachte ich mir, ich frage mal nach, wie Ihr die handhabt. Ich denke gerade
an eine statische Klasse SoundMachine, die bei Start alle Sounds generiert und dann eine
Methode:
SoundMachine.playSound(SoundMachine.SND_MENU_MOUSE OVER);

... die ich von überall aufrufen kann.

Da es im Spiel auch differenzierte Soundeinstellungen geben wird, hätte ich
gerne alles an einem Ort.

Wie regelt ihr das? Danke für Eure Meinungen...
malthoff ist offline   Mit Zitat antworten
Alt 12-10-2008, 19:31   #2 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Bremen
Beiträge: 13.341
Global ist und war nie eine Lösung. Das ist alles eine Frage der Struktur... und eine gute Struktur braucht keine globalen oder statischen Mechanismen oder Variablen.
Omega Psi ist gerade online   Mit Zitat antworten
Alt 12-10-2008, 19:45   #3 (permalink)
Developer
 
Benutzerbild von malthoff
 
Registriert seit: Sep 2001
Ort: Stuttgart
Beiträge: 519
Weitere Meinungen? (ich habe nicht nach dem für und wider von globalen funktionen/variablen gefragt, sondern nach Ideen zum Aufbau der Soundsteuerung)
Vorallem: Was ist das schlimme an Globaler Soundsteuerung...?

Geändert von malthoff (12-10-2008 um 19:47 Uhr)
malthoff ist offline   Mit Zitat antworten
Alt 12-10-2008, 19:59   #4 (permalink)
Developer
 
Benutzerbild von malthoff
 
Registriert seit: Sep 2001
Ort: Stuttgart
Beiträge: 519
wäre es besser, ich bau ein SoundObject und mache den Zugriff darauf statisch?

Ich will einfach einen sauberen Weg finden, die Sounds nicht auf zig Klassen
zu verteilen und vorallem nicht die Referenz auf das Soundobjekt allen
Klassen irgendwann mitgeben zu müssen, die zufällig nen Sound abspielen.

Lieb wäre mir Folgendes:
PHP-Code:
function onMouseOverMenu():Void {
    
// ändere MenuPunktGrafik
        
..........
   
// spiele MouseOverSound
       
soundmachine.playSound(SoundMachine.SND_MOUSEOVER); 
Dazu muss ich entweder jedem Objekt, welches Sound spielt, irgendwann
die Referenz auf SoundMachine mitgeben, oder aber ich habe statischen
Zugriff auf SoundMachine...

Ist das schlimm?
malthoff ist offline   Mit Zitat antworten
Alt 12-10-2008, 20:03   #5 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.587
Versende doch lieber ein Event (unter AS3 kann man das bubblen lassen, AS2 sieht es dann schon wieder etwas anders aus) an deine Hauptklasse, die kann dann den entsprechend angeforderten Sound abspielen.
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 12-10-2008, 20:04   #6 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Bremen
Beiträge: 13.341
Das schlimme an globalen Variablen/Klassen etc ist, dass der Code alles andere als transparent ist - es gibt unsichtbare Abhängigkeiten, die keiner will.

Mach liebe eine Komponente, die du einmal einbindest, lose koppelst und gut ist. Das ganze verlangt nur eine flache Objekthierarchie.
Omega Psi ist gerade online   Mit Zitat antworten
Alt 12-10-2008, 20:14   #7 (permalink)
Developer
 
Benutzerbild von malthoff
 
Registriert seit: Sep 2001
Ort: Stuttgart
Beiträge: 519
ja, ich befinde mich in diesem Falle in AS2. Seis drum...

Ok, folgendes zum Aufbau. Alles befindet sich in einzelnen SWFs,
damit das Laden geteilt werden kann.

1. Start mit Intro (wo ich gerne alle Sounds des Spiels laden würde,
denn Einbinden in die FLA macht keinen Sinn, weil sonst das exportieren
ewig dauert....

2. Menu mit Settings, Anleitung, Highscore..blabla...

3. Die 3 Spiellevel

Ich hab eine Menge Objekte, die ineinander verschachtelt sind. Von einer
flachen Hierarchie kann man eigentlich nicht sprechen. Mit loser Kopplung
wäre ich sehr zufrieden...suche aber nach einer Möglichkeit, die
Referenz aufs Soundobjekt, welches ganz oben in der Hierarchie erstellt
wird, NICHT bis in die Tiefen des Programms durchzureichen um auch einen
MenuButton "loooooose" zu koppeln....

Geändert von malthoff (12-10-2008 um 20:15 Uhr)
malthoff ist offline   Mit Zitat antworten
Alt 12-10-2008, 20:17   #8 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Bremen
Beiträge: 13.341
  1. EventDispatcher gibt es auch in ActionScript 2 unter Flash 8.
  2. Es müssen doch nicht alle Objekte den Sound steuern. Oder was soll das werden?
Omega Psi ist gerade online   Mit Zitat antworten
Alt 12-10-2008, 20:24   #9 (permalink)
Developer
 
Benutzerbild von malthoff
 
Registriert seit: Sep 2001
Ort: Stuttgart
Beiträge: 519
Zitat:
Zitat von Omega Psi Beitrag anzeigen
[*]EventDispatcher gibt es auch in ActionScript 2 unter Flash 8.
Ja, Gott sei Dank ;-) Aber vielleicht steh ich auch gerade auf dem Schlauch.
Irgendwo hab ich den Start...dort will ich die Sounds laden. Und dieses
Objekt, welches alle Sounds abspielen kann, muss ich doch zwangsläufig
mal mit den Klassen in Verbindung bringen, die dann das Event Dispatchen.
Also meinetwegen: (Start beinhaltet SoundMachine)
Start - Menu - MenuController - MultiPressComponent - MenuEntry

jetzt muss ich ja die Referenz auf SoundMachine komplett durchreichen,
um MenuEntry damit loose zu koppeln...und ich will auch nicht in jeder
Klasse ein getBackReference() drin haben...was ja auch keine lose
Kopplung wäre...auch Start will ich nicht komplett durchreichen, denn
was interessiert MultiPressComponent die Startklasse...?

Zitat:
Zitat von Omega Psi Beitrag anzeigen
[*]Es müssen doch nicht alle Objekte den Sound steuern. Oder was soll das werden?
Hhahahahaha... manchmal frage ich mich das auch. Sorry, die Frage kam
zum richtigen Zeitpunkt *g
malthoff ist offline   Mit Zitat antworten
Alt 12-10-2008, 20:45   #10 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg
Beiträge: 4.385
Klingt für mich wie für Event-Bubbeling geschaffen, und das kannst du auch problemlos mit AS2 umsetzen (der ursprüngliche Beitrag von Ralf ist leider offline) (wenn du das ganze auf MovieClip.prototype anwendest, müsste es auch automatisch bei allen MovieClips gehen)

Vielleicht solltest du dir auch überlegen, ob du dich auf Sounds festlegen willst, oder nicht einfach abstrakte Ereignisse (Gegner erledigt, ...) rausschicken möchtest, und ob das dann ein Sound wird, entscheidet dann ein Handler, so kannst du beispielsweise, wenn jemand Sounds abgeschaltet hat, stattdessen eine Meldung anzeigen.
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)

Geändert von Janoscharlipp (12-10-2008 um 20:46 Uhr)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 12-10-2008, 20:51   #11 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Bremen
Beiträge: 13.341
Meinst du den?

http://www.flashforum.de/forum/softwarearchitektur-und-entwurfsmuster/event-bubbling-as2-190142-post1359879.html
Omega Psi ist gerade online   Mit Zitat antworten
Alt 12-10-2008, 21:00   #12 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg
Beiträge: 4.385
Cool, ich meinte den auf seinem Blog, und der ist off, aber das wir den auch im Forum haben, ist natürlich prima
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 12-10-2008, 21:04   #13 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Bremen
Beiträge: 13.341
Wieso Bubbling.

Reicht es nicht wenn zwei, drei Controls auf das gleiche Model zugreifen?
Omega Psi ist gerade online   Mit Zitat antworten
Alt 12-10-2008, 21:36   #14 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg
Beiträge: 4.385
Er meinte ja, es sei ziemlich verschachtelt, und das ist einem mit Bubbeling einfach egal
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 12-10-2008, 21:46   #15 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Bremen
Beiträge: 13.341
Ja, aber ich dachte die verschachtelung hätten wir schon hinter uns gelassen?
Omega Psi ist gerade online   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 16:33 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2014 Marc Thiele