C++快板视觉故障

C++ Allegro visual glitch

本文关键字:故障 视觉 C++      更新时间:2023-10-16

我正在接受使用c++的allegro库的培训,但我遇到了一个问题,在使用大型图像作为帕拉拉克斯背景时,我会遇到一种持续的加载/故障,向下滚动屏幕,使我的所有图像闪烁一段时间,有没有一种方法可以加载背景而不会出现这种问题?当我尝试打印屏幕时,闪烁不会出现。

感谢

闪烁很可能是您重新绘制场景的结果,并且监视器在中途刷新。

解决方法是使用双重缓冲。阅读:

http://wiki.allegro.cc/index.php?title=Double_buffering

还有另一个工件叫做"撕裂",它是由刷新周期中的缓冲区闪电攻击引起的。这通常是通过等待垂直同步(回扫)然后绘图来解决的,但现在这有点过时了,因为我们大多数人都使用OpenGL或DirectX等库来与我们的图形硬件对话。

尽管如此,Allegro提供了一个等待垂直回扫开始的功能,在这个时间,你可以安全地快速缓冲,而不用担心撕裂。请参阅此处:

https://www.allegro.cc/manual/4/api/graphics-modes/vsync

我不能保证这就是解决方案,但看看你的代码,我不明白你为什么要创建多个缓冲区。

bufDisplay = al_create_bitmap(WIDTH, HEIGHT);
buffer = al_create_bitmap(WIDTH, HEIGHT);

除非你正在做某种需要缓冲区的特殊效果,否则它们是不必要的。Allegro 5已经提供了具有默认设置的双缓冲区。

只需将所有内容绘制到默认的目标位图(显示器的后缓冲区),然后绘制al_flip_display()

如果您想将输出居中或缩放到不同大小的窗口,通常可以只使用转换。

我不知道你为什么打Sleep(8)

如果使用Windows,则可以切换到使用OpenGL(设置ALLEGRO_OPENGL显示标志)。

你应该试试其他Allegro游戏和演示(很多都附带了源代码),看看它们是否都有问题。