在allegro5(C ++)中的另一个图像上的图像

时间:2018-05-13 08:13:51

标签: c++ image background allegro allegro5

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

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 :(得分:3)

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

  1. 清除显示
  2. 画出你的背景
  3. 在背景上绘制位图
  4. 翻转显示屏
  5. 例如:

    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