2017-04-15 4 views
0

Hallo zu spielen habe ich eine App in Phaser gebaut und will eine Folge von zwei Sounds erzeugen:Warten auf einen Ton zu stoppen, bevor den nächsten Ton

  1. „Du hast“ (geladen und als audioSound gespeichert [0 ])
  2. "Finished" (dito, audioSound [1])

kann ich dann halten-re mit 1 und haben verschiedene Wörter/Sätze 2. um dies zu tun, muss ich die Geräusche in Folge spielen .

Im Moment verwenden:

audioSound[0].play(); 

audioSound[1].play(); 

othercode... 

Spielen beide zugleich. Irgendwelche Ideen, wie man die Klänge in der richtigen Reihenfolge abspielen kann, und nur weiter bis othercode..., sobald der zweite fertig ist?

Vielen Dank im Voraus!

EDIT: nach @ Julians Antwort Hallo - um klar zu sein Ich habe den folgenden Code, um Elemente in eine Warteschlange zu pop und dann spielen sie. Obwohl die Elemente in der Warteschlange nacheinander abgespielt werden, wird die Funktion/der Code, der nach dem Ereignis der Warteschlangenwiedergabe kommt, parallel zum Ton ausgeführt, nicht wenn der Ton/die Töne beendet sind.

function playSequence(soundArray) { 
    soundArray[0].play(); 
    soundArray.forEach(function(element, index, array) { 
     if (soundArray[index + 1]) { 
      soundArray[index].onStop.addOnce(function() { 
       soundArray[index + 1].play(); 
       }, this); 
      } 
     }); 
+0

Verwendung Medienereignisse https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events –

+1

Ich habe Ihre Frage nicht fertig zu verstehen , mein Freund. Willst du zwei Sounds nacheinander spielen (du spielst einen und wenn du fertig bist, dann spielt der zweite) und so unendlich? Sie sprechen auch davon, mit einem anderen Code fortzufahren, oder? –

+0

Hey danke beides. @ Julian - Ich möchte für die Sounds nacheinander abspielen. Was im Moment passiert ist, dass Sounds 1 gleichzeitig mit Sound 2 abgespielt wird und dann der Code nach beiden beginnt ausgeführt zu werden. Im Idealfall möchte ich, dass Sounds nacheinander abgespielt werden, bevor anderer Code ausgeführt wird. Ist das sinnvoll? – user7289

Antwort

1

Sie konnten dieses versuchen:

function preload() { 

    game.load.audio('sound-explosion', 'explosion.wav'); 
    game.load.audio('sound-lose', 'lose.mp3'); 

} 

var soundlose; 
var soundexplosion; 

function create() { 
    //Add sounds 
    soundexplosion = game.add.audio('sound-explosion'); 
    soundlose = game.add.audio('sound-lose'); 

    //Prepare the next event once the sound finishes playing 
    soundexplosion.onStop.addOnce(function() { soundlose.play(); }, this); 
    soundlose.onStop.addOnce(function() { console.log('Hello!'); }, this) 

    //Play sound... 
    soundexplosion.play(); 

    ... 
} 
+0

Danke @Julian - sobald ich das tue, wird das Audio in Sequenz abgespielt, aber die Ausführung des Codes wird parallel zum Audio-Playing fortgesetzt - wie kann ich die Ausführung des Codes warten lassen, bis das Audio fertig ist? (siehe editiertes q oben) – user7289

+0

Wow! Wenn Sie den Code nach dem Ereignis ausführen möchten, versuchen Sie, den onStop in das letzte Element des Arrays einzufügen: 'soundArray [soundArray.length - 1] .onStop ...' –