2013-08-11 3 views
1

У меня есть код, написанный на Allegro 4, и я конвертирую его в Allegro 5, но у меня серьезные проблемы с функциями, которые больше не существуют в allegro 5, один из них - «blit»,Функции Allegro 4 в Allegro 5

BITMAP *bTile; // Bitmap do tile; 
BITMAP *bMapa; // Bitmap do mapa; 
BITMAP *bTexturas[20]; // Vetor de bitmap das texturas; 
BITMAP *bChar; // Bitmap do personagem; 
BITMAP *bMario[3]; 
// ########################################################## 

int main() 
{ 
    int vResolucao_x = 640; 
    int vResolucao_y = 480; 

    init(vResolucao_x, vResolucao_y); 

    BITMAP *buffer = create_bitmap(vResolucao_x, vResolucao_y); 

    bTile = load_bitmap("Tiles/tile.bmp", NULL); 
    bChar = load_bitmap("Tiles/mario.bmp", NULL); 
    bMapa = create_bitmap(vResolucao_x, vResolucao_y); 

// ############# - Carrega imagens do mario - ############ 
    bMario[0] = create_bitmap(vTile,vTile); 
    bMario[1] = create_bitmap(vTile,vTile); 
    bMario[2] = create_bitmap(vTile,vTile); 
    blit(bChar, bMario[0], 0, 0, 0, 0, vTile, vTile); 
    blit(bChar, bMario[1], 33, 0, 0, 0, vTile, vTile); 
    blit(bChar, bMario[2], 66, 0, 0, 0, vTile, vTile); 
// ####################################################### 

    install_int(fGravidade,5); 

    fCarrega_Sprites_Mapa(); 
    fCarrega_Mapa(); 
    fMostra_Mapa(); 

    draw_sprite(screen, bMapa, 0, 0); 

    while (!key[KEY_ESC]) { 

Практически ничего из этого моего старого кода работает с Allegro 5, так что я делаю преобразование, как я могу узнать, но эта функция Blit, не может найти его как в аллегро 5, другая функция, которую я могу не найти ваш симулятор: install_int (...)

+0

Функции, которые вы ищите, это 'al_draw_bitmap_region' и' al_create_timer'. Использование их немного отличается, но обратите внимание, что вы не можете механически переводить между Allegro 4 и Allegro 5. Сначала я рекомендую узнать о очередях событий Allegro и ознакомиться с основными примерами программ Allegro 5. – milleniumbug

ответ

2

Allegro 5 - по существу совершенно новая библиотека. Вот пошаговый перевод, насколько это возможно. Обратите внимание, что Allegro 5 использует принципиально другую концепцию (цикл событий), и вам действительно нужно потратить время, чтобы узнать, как это работает, прежде чем погрузиться в попытку конвертировать ваш код.

ALLEGRO_BITMAP *bMario[3]; 
// ########################################################## 

int main() 
{ 
    int vResolucao_x = 640; 
    int vResolucao_y = 480; 

    init(vResolucao_x, vResolucao_y); 

    ALLEGRO_BITMAP *buffer = al_create_bitmap(vResolucao_x, vResolucao_y); 

    bTile = al_load_bitmap("Tiles/tile.bmp"); 
    bChar = al_load_bitmap("Tiles/mario.bmp"); 
    bMapa = al_create_bitmap(vResolucao_x, vResolucao_y); 

// ############# - Carrega imagens do mario - ############ 
    bMario[0] = al_create_bitmap(vTile,vTile); 
    bMario[1] = al_create_bitmap(vTile,vTile); 
    bMario[2] = al_create_bitmap(vTile,vTile); 

    al_set_target_bitmap(bMario[0]); 
    al_draw_bitmap(bchar, 0, 0, 0); 

    al_set_target_bitmap(bMario[1]); 
    al_draw_bitmap(bchar, 33, 0, 0); 

    al_set_target_bitmap(bMario[2]); 
    al_draw_bitmap(bchar, 66, 0, 0); 

    al_set_target_backbuffer(display); 
// ####################################################### 

    fGravidade = al_create_timer(5/1000.0); // ALLEGRO_TIMER* 

    ALLEGRO_EVENT_QUEUE *queue = al_create_event_queue(); 
    al_register_event_source(queue, al_get_timer_event_source(gfGravidade)); 
    al_register_event_source(queue, al_get_keyboard_event_source()); 

    fCarrega_Sprites_Mapa(); 
    fCarrega_Mapa(); 
    fMostra_Mapa(); 

    al_draw_bitmap(bMapa, 0, 0, 0); 
    al_flip_display(); 

    while (true) { 
     ALLEGRO_EVENT event; 
     al_wait_for_event(queue, &event); 

     if (event.type == ALLEGRO_EVENT_TIMER) { 
     // fGravidade ticked 
     } 
     else if (event.type == ALLEGRO_EVENT_KEY_CHAR) { 
     if (event.keyboard.keycode == ALLEGRO_KEY_ESCAPE) { 
      break; 
     } 
     } 
    } 
Смежные вопросы