【问题标题】:Image over another image in allegro5 (C++)在 allegro5 (C++) 中的另一个图像上的图像
【发布时间】:2018-10-23 03:44:47
【问题描述】:

我在游戏中添加背景时遇到问题。我的代码如下所示:

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

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

【问题讨论】:

    标签: c++ image background allegro allegro5


    【解决方案1】:

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

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-14
      • 1970-01-01
      • 2017-11-18
      • 1970-01-01
      • 2015-06-06
      • 1970-01-01
      • 2016-04-11
      相关资源
      最近更新 更多