C++快板视觉故障
C++ Allegro visual glitch
我正在接受使用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游戏和演示(很多都附带了源代码),看看它们是否都有问题。
- 分段故障(堆芯转储)矢量
- C++中的动态铸造故障
- 数组的指针从不分段故障
- vscode g++链路故障:体系结构x86_64的未定义符号
- 访问被拒绝后,c++中的故障保护代码
- Windows 10-使用gtkmm-3.0库和g++[包括再现]的分段故障
- 视觉studo 2019中的漫画和静态/动态绑定
- 如何改变c++应用程序的视觉效果
- 视觉工作室项目.提取源文件夹名称
- 调试 CUDA MMU 故障
- Geeksforgeeks C 程序故障排除:IEE 754 表示法为十进制
- 为什么我在尝试模板时遇到视觉工作室C++错误
- 视觉工作室 2017;启用 /permissive 时,类型 "const wchar_t *" 的参数与类型 "PWSTR" 的参数不兼容
- 视觉我希望一个函数在另一个函数C++中进行计算
- 视觉 如何循环访问C++中遵循类似格式的多个.txt文件?
- Arch Linux.AUR 包 mysql 不能用 makepkg 构建.错误:构建 () 中出现故障
- remove(str.begin(), str.end(), );无法正常工作(我正在使用视觉工作室 2012)
- 正在处理故障(堆芯转储)
- C++快板视觉故障
- OpenCV 3.0分词故障(视觉词袋)