domingo, 13 de noviembre de 2016

Sonidos y música

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)

2 comentarios:

  1. Hola, gracias por los excelentes aportes. Estoy intentando insertar un efecto de sonido de explosion cuando se ejecuta una colision y un efecto de laser cuando mi nave dispara. Intente con el ejemplo que colocas aca pero se para la ejecucion del juego. Podrias ayudarme con esto? Gracias

    ResponderEliminar
    Respuestas
    1. Hola Luis. ¿Podrías abrir la consola de desarrollo del navegador y mostrar el error que arroja justo cuando se para?

      Eliminar