El aspecto sonoro de un juego es vital y sin embargo muchas veces es menospreciado. Una mala ejecución en este apartado puede arruinar un juego sobresaliente.
En un juego además hay que diferenciar entre música y efectos de sonido. Phaser no los distingue, pero tú deberías tenerlo en cuenta cuando diseñes tus juegos. Los efectos de sonidos son cortos y tienen que reproducirse nada más realizarse la acción que los desencadena. La música por otro lado es de larga duración y puede no estar sincronizada con la acción del juego.
Formatos soportados
Phaser no impone ningún formato de audio. Los formatos que pueden y no pueden usarse vienen dados por el navegador donde se ejecute el juego. A día de hoy (13 de noviembre de 2016) el soporte de los distintos navegadores a los distintos formatos de audio es el que sigue:Cargando los archivos
Los archivos de audio se cargan de manera similar a los sprites.
function preload(){
game.load.audio("MiSonido","audios/MiSonido.mp3");
}
Después podremos acceder al objeto de tipo Phaser.Sound de forma fácil.
var sonido = game.add.audio("MiSonido");
Los archivos MP3 son comprimidos y su decodificación no es instantánea. Para ello puede usarse la función setDecodedCallback.
game.sound.setDecodedCallback([ sonido ], function(){
// Es seguro usar los sonidos
}, this);
Reproducir el audio, cambiar el volumen
Ahora para reproducir el audio podemos usar cuatro funciones muy sencillas: play, pause, resume y stop.
sonido.play();
sonido.pause();
sonido.resume();
sonido.stop();
Si queremos cambiar el volumen de ese audio modificamos la propiedad volume.
sonido.volume = 0.5 // Un valor entre 0 y 1
Es posible realizar transiciones (fades) usando fadeTo. Especificamos el volumen que tendrá al finalizar la transición y el tiempo que vamos a dar para que se realice el cambio. Una vez especificado, se modificará el volumen de forma gradual en el tiempo especificado llegando al volumen que indicamos.
sonido.fadeTo(1000,0.8); // Subir el volumen progresivamente durante 1 segundo (1000 milisegundos hasta 0.8)