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 有效(最好的情况是当我有可见的蛇和背景但没有苹果时)。
在添加背景之前,我的蛇尾巴有时会消失,但不是很明显,除此之外,一切似乎都还好。
任何人都知道如何正确添加背景?
还是我电脑的问题?
每个绘制循环一次,您应该:
- 清除显示
- 绘制背景
- 在背景之上绘制位图
- 翻转显示
例如:
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.
我在游戏中添加背景时遇到问题。我的代码看起来像这样:
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 有效(最好的情况是当我有可见的蛇和背景但没有苹果时)。 在添加背景之前,我的蛇尾巴有时会消失,但不是很明显,除此之外,一切似乎都还好。 任何人都知道如何正确添加背景? 还是我电脑的问题?
每个绘制循环一次,您应该:
- 清除显示
- 绘制背景
- 在背景之上绘制位图
- 翻转显示
例如:
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.