My favorites | Sign in
Project Home Downloads Wiki Issues Source
Search
for
Version25  
25 - Añadiendo efectos sonoros
Updated Feb 4, 2010 by ncabanes

Introducción

Remake (parcial) de Fruity Frank... 25 - Añadiendo efectos sonoros.

Detalles

Vamos a añadir sonidos al juego, para que tenga "algo más de vida". Para conseguirlo, crearemos una nueva clase "Sonido", que se apoyará en "Sdl_mixer", ocultando los detalles de esta librería.

Por ejemplo, el constructor se encargará de cargar un fichero de música:

    /// Constructor a partir de un nombre de fichero
    public Sonido(string nombreFichero)
    {
      punteroInterno = SdlMixer.Mix_LoadMUS(nombreFichero);
    }

Y tendremos funciones para reproducir un sonido una vez (por ejemplo, cuando muere un enemigo, o nuestro personaje, o cuando recogemos una fruta), así como para reproducir un sonido de forma continua (para la música de fondo):

    /// Reproducir una vez
    public  void Reproducir1()
    {
      SdlMixer.Mix_PlayMusic(punteroInterno, 1);
    }
    
    /// Reproducir continuo (musica de fondo)
    public  void ReproducirFondo()
    {
      SdlMixer.Mix_PlayMusic(punteroInterno, -1);
    } 

También necesitamos otra función que permita dejar de reproducir sonidos:

    /// Interrumpir toda la reproducción de sonido
    public  void Interrumpir()
    {
      SdlMixer.Mix_HaltMusic();
    }  

Así, cada nivel tendrá una música de fondo. Esta música se declara en la clase "Nivel" genérica:

    public class Nivel
    {
      protected Sonido miMusicaFondo;
      ...

En la clase "Nivel" prepararemos también las funciones para reproducir su música de fondo o para detenerla, ambas basadas en las posibilidades de la clase "Sonido":

    public void ReproducirMusica()
    {
      if (miMusicaFondo != null)
        miMusicaFondo.ReproducirFondo();
    }
    
    public void PararMusica()
    {
      if (miMusicaFondo != null)
        miMusicaFondo.Interrumpir();
    }

Y esa música se cargará en el constructor de cada "clase hija" (porque cada nivel concreto tendrá su propia música de fondo):

    public class Nivel1: Nivel
    {

      const byte NUMENEMIGOS = 3;  
      
      public  Nivel1()
      {
        byte i;
        
        miMapa = new Mapa1();
        miMusicaFondo = new Sonido("sonidos\\fruity-nivel1.mp3");
        enemigos = new Enemigo[NUMENEMIGOS];
        ...

En el juego, tendremos una música adicional para el cambio de nivel (todavía no habrá sonido al recoger frutas ni al morir personajes), y entonces, cuando se cambio de nivel, deberemos parar la música del nivel anterior, reproducir el sonido de cambio de nivel, y a continuación comenzar a reproducir la música de fondo del nuevo nivel, así:

    public  void SiguienteNivel()
    {
      miNivel.PararMusica();
      musicaNuevoNivel.Reproducir1();
      ...
      if (numeroNivel % 3 == 1)
          miNivel = new Nivel1();
      ...
      miNivel.ReproducirMusica(); 

Sólo falta crear la carpeta sonidos, y guardar en ella los sonidos que nos interesan, que habremos capturado previamente del juego original, o bien habremos creado nosotros mismos. También deberemos modificar los ficheros "BAT" encargados de compilar todos los fuentes, para que incluyan la nueva clase "Sonido".


Sign in to add a comment
Powered by Google Project Hosting