代码之家  ›  专栏  ›  技术社区  ›  user9717641

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

  •  1
  • user9717641  · 技术社区  · 7 年前

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

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

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

    1 回复  |  直到 7 年前
        1
  •  3
  •   rcorre    7 年前

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

    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