allegro5 (C++) 中的另一幅图像

Image over another image in allegro5 (C++)

我在游戏中添加背景时遇到问题。我的代码看起来像这样:

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

我大部分时间都看到一个苹果和黑屏。 我一直在更改代码中某些行的顺序,并且这些组合中的 none 有效(最好的情况是当我有可见的蛇和背景但没有苹果时)。 在添加背景之前,我的蛇尾巴有时会消失,但不是很明显,除此之外,一切似乎都还好。 任何人都知道如何正确添加背景? 还是我电脑的问题?

每个绘制循环一次,您应该:

  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) 中,因为帧率将不受限制。也就是说,它将 运行 尽可能快地被允许,并且帧速率将不一致。典型的方法是使用 event-driven draw loop.