2016-05-29 1 views
1

Я новичок в Allegro(), и я делаю свою первую игру. Мне нужно поместить изображение в качестве фона и немного квадрата, который движется перед ним. В моем коде на каждом кадре изображение рисуется в координатах (0; 0), а затем квадрат рисуется над чем-то, и, я думаю, он должен появляться над изображением, потому что он был нарисован после него , но это не так.Как поместить картинку в качестве фона (Allegro 5)

Может ли кто-то изгнать меня, как это сделать? Спасибо

PS: Оглядываясь в интернете, я обнаружил, что это может иметь какое-то отношение к blitting, может кто-нибудь объяснить мне, что это за операция?

+0

http://stackoverflow.com/questions/6632697/how-do-you-make-a-background-in-allegro-with-c посмотреть здесь. –

+0

Я уже видел это, но эта программа написана с помощью Allegro 4 – NOVA99

ответ

2

Я отправлю код, чтобы просто нарисовать фон на дисплее. И я объясню это мало-помалу

#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; 
} 

Эта часть начинается до аллегро, al_init запускает систему аллегро и al_init_image_addon позволяет нам использовать растровые изображения, которые, как аллегро управляет изображения:

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; 
    } 

Здесь мы загружаем изображение, вы просто положить в имени файла и аллегро загрузит его для вас возвращая ALLEGRO_BITMAP * (NULL если не удалось). После вызова al_load_bitmap мы проверяем, была ли загружена битмап.

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

Allegro привлекает к BackBuffer, что это означает, что она не будет непосредственно рисовать на экране. Вместо этого он обращается к копии дисплея (backbuffer), и как только вы переворачиваете backbuffer (al_flip_display()), эта копия (которую вы рисуете поверх) будет отображаться сразу.

Это можно увидеть здесь видим:

al_draw_bitmap(background,0,0,0); 

al_flip_display(); 

Если вы собираетесь быть инициализацией много аллегро вещи, вы можете инициализировать все вместе, как, например:

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 есть много учебников, которые намного более понятны и немного более широкие, если вам интересно.