Bennu Game Development

Foros en Español => Offtopic => Topic started by: Yawin on November 23, 2013, 03:45:34 PM

Title: Problemas con Allegro
Post by: Yawin on November 23, 2013, 03:45:34 PM
Wole, el caso es que estoy aprendiendo Allegro y tengo problemas. Lo pongo aquí, porque al fin y al cabo no es una duda de Bennu.


Mi código es el siguiente:
#include <iostream>
#include <allegro5/allegro.h>


using namespace std;


const int _ANCHO=1280,_ALTO=720;
ALLEGRO_DISPLAY *display; /* Puntero a nuestra pantalla */


/* Tipos de datos "avanzados" */
    struct Coord
    {
        int x,y;
    };


/* Tupla que maneja el sistema principal */
    struct sistema
    {
        ALLEGRO_EVENT_QUEUE *event_queue;/* Puntero hacia los eventos del sistema */
        bool pressed_keys[ALLEGRO_KEY_MAX];


        int init()
        {
            al_init(); /* Iniciamos el sistema */


            /* Teclado */
                al_install_keyboard();


            /* Gráficos*/
                display=al_create_display(_ANCHO,_ALTO); /* Creamos la pantalla guardando su dirección de memoria        */
                al_clear_to_color(al_map_rgb(0,0,0)); /* Borramos la pantalla y la ponemos en negro                      */
                al_flip_display(); /* Refrescamos la pantalla. sirve para aplicar los cambios que hemos hecho en display */


            /* Eventos */
                event_queue = al_create_event_queue(); /* Reservamos la memoria */
                al_register_event_source(event_queue, al_get_keyboard_event_source()); /* Indicamos al sistema que queremos utilizar los eventos de teclado */
        }


        int fin()
        {
            al_destroy_display(display); /* Destruimos la pantalla liberando la memoria que ocupa                    */
        }


        bool key(int keycode)
        {
            /* Recogemos el evento */
                ALLEGRO_EVENT event;
                al_wait_for_event(event_queue, &event);


            /* Si hay evento de teclado*/
                if (event.type == ALLEGRO_EVENT_KEY_DOWN)
                {
                    if (event.keyboard.keycode == keycode) /* Comprobamos si la tecla pulsada es la que preguntamos */
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
            /* Si no hay tecla pulsada, retornamos false */
                else
                {
                    return false;
                }
        }
    };


/* Esta estructura controla las rutinas básicas del juego */
    struct juego
    {
        ALLEGRO_BITMAP *fondo;
        Coord s_repet;


        /* Scroll de fondo */
            void scroll(const char *fichero,bool _h,bool _v)
            {
                fondo=al_load_bitmap(fichero);
                s_repet={_h,_v};
            }
            void scroll_pinta()
            {
                ALLEGRO_BITMAP *buffer;
                al_set_target_bitmap(buffer);


                for(int j=0;j<480;j++)
                {
                    for(int i=0;i<640;i++)
                    {
                        al_put_pixel(i,j,al_get_pixel(fondo,i,j));
                    }
                }


                al_draw_bitmap(fondo,0,0,0);
            }


        /* Funciones generales */
            void frame()
            {
                scroll_pinta();


            }
    };


int main()
{
    sistema *sys=new sistema();
    sys->init();


    juego *marcianos=new juego();
    marcianos->scroll("graficos/nave.bmp",1,1);
    do
    {
        marcianos->frame();
    }while(!sys->key(ALLEGRO_KEY_ESCAPE));


    sys->fin();
    return 0;
}



Y, el caso es que cuando la función juego->frame(); lama a la función scroll_pinta() el programa aborta. ¿Qué estoy haciendo mal? Es que no soy capaz de verlo.
Title: Re:Problemas con Allegro
Post by: FreeYourMind on November 23, 2013, 07:45:00 PM
En tu codigo no estan las funciones que dices...... por otro lado puede que sea porque no tengas un bucle principal
Title: Re:Problemas con Allegro
Post by: Yawin on November 23, 2013, 08:42:43 PM
Ha sido un lapsus. La función es "marcianitos->frame();". Juego es la estructura.


Por otro lado, sí que tengo un bucle principal. En el main();