Problemas con Allegro

Started by Yawin, November 23, 2013, 03:45:34 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Yawin

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.
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

FreeYourMind

En tu codigo no estan las funciones que dices...... por otro lado puede que sea porque no tengas un bucle principal

Yawin

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();
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end