Wie verhindere ich, dass ein sound in AS3 zu spielen, anderen sound?
Ich habe den code
if(_snd !=null)
{
_channel.stop();
}
_snd = new SoundBeep();
_channel = new SoundChannel();
_channel = _snd.play();
aber wenn der Benutzer klickt ein paar mal, schnell, flash-wartet ein bisschen, dann piept Sie schnell. Ich bin mir nicht sicher, was falsch läuft. Irgendwelche Ideen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
versuchen Sie dies:
Ich hatte dieses problem - es war zum Verrücktwerden! In anderen Sprachen (java, C#) hätte ich verwendet, Synchronisation um einen kritischen Abschnitt. In Flash hatte ich es imitieren. Es ist nicht perfekt - noch eine kleine chance, dass der zweite Ton wird spielen über dem ersten, aber es ist sehr klein.
Hier ist der Schlüssel: implementieren Sie eine Kombination aus factory und singleton-Muster.
Eine wichtige Entdeckung, die ich machte, war, dass ich kopieren müssen meine member-Variablen in eine temporäre variable, bevor ich auf diese zu reagieren, bei einigen anderen Aufruf an das Objekt versucht zu tauschen, einen neuen Ton vor, ich bin mit dem Aufräumen fertig, die vorherigen. Hier ist ein snippet, dass bedeutet das:
Hinweis, wie ich nicht nur kopieren von audioChannel zu tempAudioChannel, aber ich habe null heraus, audioChannel, bis die Methode ist nahezu abgeschlossen, setzen Sie den Wert anschließend wieder. Ich bin sicher von der Synchronisation Fehler während alle, aber die kurze Zeit zwischen, wenn ich zum testen den Wert von audioChannel und wenn ich damit fertig das kopieren und nulling, die überaus kurz.
Zurück zu meinem Kommentar über die Fabrik und das singleton-Muster. Während der eine Ton wird aufgeräumt - gestoppt und verworfen - der andere kann immer gestartet, also brauche ich mehr als eines wird nun vom Soundmanager. Damit ich Sie erstellen wird nun vom Soundmanager pro audio mit dem Namen. Jedes mal, wenn ich brauche, um zu handeln, auf eine audio-Datei, die wird nun vom Soundmanager Klasse sagt mir die manager-Instanz zu nennen, so dass ich nicht hören will, Duplikate das gleiche Geräusch begann als Ergebnis.
Folgende code ist eine vollständige wird nun vom Soundmanager von meinem aktuellen kommerziellen Projekt. Es verweist auf eine andere Klasse, die nicht gezeigt - Konfiguration, aber diese Klasse behandelt nur immer Pfade zu audio-Dateien aus einer config-Datei, und bekommen Verstärkung von Werten aus einer anderen XML-Datei. (Der AUFTRAGGEBER gelieferten Dateien, die nicht normalisiert wurden, um die gleiche Lautstärke, so hatten wir es zu tun haben.) So würden Sie ändern müssen alle Verweise auf das config-Objekt aus diesem code.
HINWEIS: ich verwende die temporäre variable trick ALLE ÜBER DEM PLATZ, auf mindestens zwei member-Variablen, audio-und audioChannel.