2016-05-29 14 views
1

Ich bin neu bei Allegro() und ich mache mein erstes Spiel. Ich muss ein Bild als Hintergrund und ein kleines Quadrat setzen, das sich davor bewegt. In meinem Code wird in jedem Frame das Bild an den Koordinaten (0; 0) gezeichnet und dann wird das Quadrat gezeichnet (etwas; etwas), und ich denke, es sollte über dem Bild erscheinen, weil es danach gezeichnet wurde aber das tut es nicht.Wie man ein Bild als Hintergrund setzt (Allegro 5)

Kann mir jemand erklären, wie man das macht? Danke

PS: Umschauen im Internet fand ich, dass dies etwas mit Blitting haben könnte, könnte mir jemand erklären, was diese Operation ist?

+0

http://stackoverflow.com/questions/6632697/how-do-you-make-a-background-in-allegro-with-c werfen Sie einen Blick hierüber. –

+0

Ich habe es schon gesehen, aber das Programm ist mit Allegro 4 geschrieben – NOVA99

Antwort

2

Ich poste den Code, um nur den Hintergrund auf dem Display zu zeichnen. Und ich werde es erklären, nach und nach

#include <stdio.h> 
#include <allegro5/allegro.h> 
#include <allegro5/allegro_image.h> 

#define BACKGROUND_FILE  "background.png" 
int main(void){ 

    ALLEGRO_DISPLAY *display = NULL; 
    ALLEGRO_BITMAP *background=NULL; 
    if(!al_init()) { 
     fprintf(stderr, "failed to initialize allegro!\n"); 
     return -1; 
    } 
    al_init_image_addon();//should check for errors 

    display = al_create_display(640, 480); 
    if(!display) { 
     fprintf(stderr, "failed to create display!\n"); 
     return -1; 
    } 

    background=al_load_bitmap(BACKGROUND_FILE); 
    if(!background) 
    { 
     fprintf(stderr, "failed to load background bitmap!\n"); 
     return -1; 
    } 
    al_draw_bitmap(background,0,0,0); 

    al_flip_display(); 

    al_rest(2.0); 

    al_destroy_display(display); 
    al_destroy_bitmap(background); 
    al_uninstall_system(); 
    return 0; 
} 

Dieser Teil startet allegro, al_init startet das allegro-System, und al_init_image_addon lässt uns Bitmaps verwenden die ist, wie allegro verwaltet Bilder:

if(!al_init()) { 
     fprintf(stderr, "failed to initialize allegro!\n"); 
     return -1; 
    } 
    al_init_image_addon();//should check for errors 

Hier wir schaffen eine Anzeige und überprüfen, ob es erfolgreich erstellt wurde:

display = al_create_display(640, 480); 
    if(!display) { 
     fprintf(stderr, "failed to create display!\n"); 
     return -1; 
    } 

wir ein Bild Hier laden Sie einfach nur in den Dateinamen setzen und allegro lädt es für Sie eine Rückkehr ALLEGRO_BITMAP * (NULL, wenn nicht erfolgreich). Nach dem Aufruf von al_load_bitmap überprüfen wir, ob das Bitmap erfolgreich geladen wurde.

background=al_load_bitmap(BACKGROUND_FILE); 
if(!background) 
{ 
    fprintf(stderr, "failed to load background bitmap!\n"); 
    return -1; 
} 

Allegro bezieht sich auf einen Backbuffer, was bedeutet, dass es nicht direkt auf das Display zeichnen wird. Stattdessen wird es zu einer Kopie der Anzeige (Backbuffer) und sobald Sie den Backbuffer (al_flip_display()) spiegeln, wird diese Kopie (die Sie oben gezeichnet haben) auf einmal angezeigt.

Dies kann sieht hier gesehen:

al_draw_bitmap(background,0,0,0); 

al_flip_display(); 

Wenn Sie viele allegro Sachen werden werden initialisiert, Sie könnten alle zusammen wie zum Beispiel initialisiert werden sollen:

int allegro_startup(void) 
{ 
    if(al_init()) 
    { 
     if(al_init_primitives_addon()) 
     { 
      if(al_install_keyboard()) 
      { 
       if(al_install_mouse()) 
       { 
        if(al_init_image_addon()) 
        { 
         al_init_font_addon(); //Void 
         if(al_init_ttf_addon()) 
         { 
          if(al_install_audio()) 
          { 
           if(al_init_acodec_addon()) 
           { 
            if(al_reserve_samples(1)) 
            { 

             return AL_STARTUP_SUCCESS; 


            } 
            else 
             fprintf(stderr,"ERROR: Failed to reserve samples:(\n"); 
            //al_shutdown_acodec_addon(); Does not exist 
           } 
           else 
            fprintf(stderr,"ERROR: Failed to initialize acodec addon\n"); 
           al_uninstall_audio(); 
          } 
          else 
           fprintf(stderr,"ERROR: Failed to install audio\n"); 
          al_shutdown_ttf_addon(); 
         } 
         else 
          fprintf(stderr,"ERROR: Failed to initialize ttf addon\n"); 
         al_shutdown_font_addon(); 
         al_shutdown_image_addon(); 
        } 
        else 
         fprintf(stderr,"ERROR: Failed to initialize image addon\n"); 
        al_uninstall_mouse(); 
       } 
       else 
        fprintf(stderr,"ERROR: Failed to install mouse\n"); 
       al_uninstall_keyboard(); 
      } 
      else 
       fprintf(stderr,"ERROR: Failed to load primitives addon\n"); 
      al_shutdown_primitives_addon(); 
     } 
     else 
      fprintf(stderr,"ERROR: Failed to install keyboard\n"); 
     al_uninstall_system(); 
    } 
    else 
     fprintf(stderr,"ERROR: Failed to initialize allegro system\n"); 
    return AL_STARTUP_ERROR; 
} 

void allegro_shut_down(ALLEGRO_DISPLAY *display,ALLEGRO_EVENT_QUEUE *event_queue) 
{ 
    al_destroy_display(display); 
    al_destroy_event_queue(event_queue); 
    al_uninstall_audio(); 
    al_shutdown_ttf_addon(); 
    al_shutdown_font_addon(); 
    al_shutdown_image_addon(); 
    al_uninstall_mouse(); 
    al_uninstall_keyboard(); 
    al_shutdown_primitives_addon(); 
    al_uninstall_system(); 

} 

Here Es gibt viele Tutorials, die viel klarer und ein wenig breiter Themen sind, wenn Sie interessiert sind.

Verwandte Themen