Añadiendo sonidos al menu

 Continuando con el ejemplo anterior ahora vamos a añadirle sonidos al menu.


Para poder utilizar sonidos en el proyecto se deben de añadir dos librerías de allegro:

#include <allegro5/allegro_audio.h>
#include <allegro5/allegro_acodec.h>

Al igual que el resto de librerías de allegro lo primero que se debe de hacer es inicializarlas, con los siguientes comandos:

al_init_acodec_addon();
al_install_audio();

Se crea una variable para guardar el audio, utilizando el comando ALLEGRO_SAMPLE *sound;

Se debe de reservar memoria para los samples con el comando al_reserve_samples(numeroSamples); 

Quedando la función main de la siguiente manera:

int main(void)
{
    // inicializamos las librerías
    al_init();
    al_init_primitives_addon();
    al_init_font_addon();
    al_init_ttf_addon();
    al_init_image_addon();
    al_install_keyboard();
    al_install_mouse();
    al_init_acodec_addon();
    al_install_audio();

    ALLEGRO_DISPLAY* display = al_create_display(800, 450);
    ALLEGRO_TIMER* timer = NULL;
    al_set_window_title(display, "KodayRPG - Menu");
    
    al_reserve_samples(2);
    sound1 = al_load_sample("datos/button1.wav");
    sound2 = al_load_sample("datos/click.wav");
    sistema.img = al_load_bitmap("datos/menu1.png");
    sistema.fondo = al_map_rgb(40, 40, 120);
    sistema.FPS = 60;

    timer = al_create_timer(1.0 / sistema.FPS);
    // creo lista de eventos
    sistema.Mis_eventos = al_create_event_queue();
    // asigno eventos a la lista de eventos
    al_register_event_source(sistema.Mis_eventos, al_get_keyboard_event_source());
    al_register_event_source(sistema.Mis_eventos, al_get_display_event_source(display));
    al_register_event_source(sistema.Mis_eventos, al_get_timer_event_source(timer));
    al_start_timer(timer);
    juego();
    al_destroy_sample(sound1);
    al_destroy_sample(sound2);
    al_destroy_display(display);
}

Recordad que antes de finalizar la aplicación debe de liberar la memoria utilizando el comando al_destroy_sample(sound1);

Para cargar el sonido que deseamos en la variable se escribe lo siguiente:

sound = al_load_sample("ficheroSonido.wav");

En nuestro ejemplo añadimos el sonido en los botones, por tanto hay que modificar la clase de los botones, concretamente el método pinta().

class ALLEGRO_MIBOTON
{
    int x, y;
    int alto;
    int ancho;
    const char* texto;
    ALLEGRO_FONT* fuente;
    bool click, encima;
public:
    void crea(int _x, int _y, ALLEGRO_FONT* font, const char* _texto)
    {
        fuente = font;
        x = _x;
        y = _y;
        texto = _texto;
        alto = al_get_font_line_height(fuente) + 8;
        ancho = al_get_text_width(fuente, texto) + 20;
        click = false;
        encima = false;
    }
    void pinta()
    {
        ALLEGRO_COLOR grey;
        ALLEGRO_COLOR grey2;
        ALLEGRO_COLOR grey3;
        ALLEGRO_COLOR black;
        ALLEGRO_COLOR white;
        grey = al_map_rgb(0xe0, 0xe0, 0xe0);
        grey2 = al_map_rgb(0xc0, 0xc0, 0xc0);
        grey3 = al_map_rgb(0x90, 0x90, 0x90);
        black = al_map_rgb(0, 0, 0);
        white = al_map_rgb(155, 155, 155);
        if (ratonEstado.x >= x && ratonEstado.x < x + ancho + 1 && ratonEstado.y >= y && ratonEstado.y < y + alto + 1)
        {
            if (al_mouse_button_down(&ratonEstado, 1))
            {
                //pulsa el raton
                al_draw_text(fuente, black, x + 9.5, y, 0, texto);
                if (!click)
                {
                    al_play_sample(sound2, 1.0, 0.0, 1.0, ALLEGRO_PLAYMODE_ONCE, NULL);
                    click = true;
                }
            }
            else
            {
                // sin pulsar       
                al_draw_text(fuente, white, x + 9.5, y, 0, texto);
                if (!encima) 
                {
                    al_play_sample(sound1, 1.0, 0.0, 1.0, ALLEGRO_PLAYMODE_ONCE, NULL);
                    encima = true;
                }
                click = false;
            }
        }
        else
        {      
            al_draw_text(fuente, black, x + 9.5, y, 0, texto);
            encima = false;
            click = false;
        }      
    }
    bool pulsado()
    {
        return (ratonEstado.x >= x && ratonEstado.x < x + ancho + 1 && ratonEstado.y >= y && ratonEstado.y < y + alto + 1) && al_mouse_button_down(&ratonEstado, 1);
    }
};

Se utilizan dos variables del tipo bool para controlar cuando debe de reproducir el sonido.

Si todo está correcto tendrás lo mismo que se muestra en el siguiente video, siempre que tengas todas las imágenes y sonidos.


Para poder ejecutarlo deberás tener las imágenes y sonidos utilizados.  Descárgate el ejemplo completo con las imágenes y sonidos.

SHARE
    Blogger Comment

0 comentarios:

Publicar un comentario