Функции Allegro 4 в Allegro 5

У меня есть код, написанный на Allegro 4, и я конвертирую его в Allegro 5, но у меня серьезные проблемы с функциями, которых больше нет в 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, поэтому я делаю преобразование, как я могу узнать, но эта блит-функция не может найти ее, как в allegro 5, другая функция, которую я не могу найти, ваша имитация: install_int (...)


person user2672904    schedule 11.08.2013    source источник
comment
Вам нужны функции al_draw_bitmap_region и al_create_timer. Их использование немного отличается, но обратите внимание, что вы не можете механически переводить между Allegro 4 и Allegro 5. Сначала я рекомендую узнать об очередях событий Allegro и ознакомиться с базовыми примерами программ Allegro 5.   -  person milleniumbug    schedule 12.08.2013


Ответы (1)


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;
        }
      }
    }
person Matthew    schedule 12.08.2013