Изображение поверх другого изображения в allegro5 (C ++) - PullRequest
0 голосов
/ 13 мая 2018

У меня проблема с добавлением фона в мою игру. Мой код выглядит так:

while (true)
{
    al_draw_bitmap(background, 0, 0, NULL);
    al_flip_display();
    some code(...);
    al_draw_bitmap(snake,0,0,NULL);
    /*drawing my snake's tail*/
    al_clear_to_color(al_map_rgb(0,0,0));
    al_draw_bitmap(apple,0,0,NULL);
    al_flip_display();
}

И большую часть времени я видел яблоко и черный экран. Я изменял порядок некоторых строк в коде, и ни одна из этих комбинаций не работала (лучший случай был, когда у меня были видимые змея и фон, но не было яблока). Перед добавлением фона хвост моей змеи иногда исчезал, но он был не очень заметен, и, кроме того, все было в порядке. Кто-нибудь знает, как правильно добавить фон? А может это вина моего компьютера?

1 Ответ

0 голосов
/ 13 мая 2018

Один раз за цикл прорисовки вы должны:

  1. очистить экран
  2. нарисовать фон
  3. нарисовать растровые изображения поверх фона
  4. переверните дисплей

Например:

al_clear_to_color(al_map_rgb(0,0,0));
al_draw_bitmap(background, 0, 0, NULL);
al_draw_bitmap(apple,0,0,NULL);
al_draw_bitmap(snake,0,0,NULL);
al_flip_display();

Обратите внимание, что вы должны вызывать al_flip_display только один раз за цикл рисования , после того как вы нарисовали вседля этого цикла.al_clear_to_color должен быть вызван первым, так как он уничтожит все, что вы нарисовали.В приведенном вами примере вы рисуете свое яблоко и змею в одном и том же месте, поэтому я не удивлюсь, если один из них блокирует часть другого.

Кроме того, вы, вероятно, не хотите придерживатьсяваш цикл рисования в while(true) как частота кадров будет неограниченным.То есть он будет работать так быстро, как это разрешено, и частота кадров не будет постоянной.Типичный подход - использовать управляемый событиями цикл рисования .

...