游戏开发 - 避免闪烁问题

4
我正在使用winforms(C#和.netframework 2.0)开发类似俄罗斯方块的游戏。 窗体中有一个背景图像和一个图片框,在500ms间隔内向下移动(分配新位置)。
问题在于当图片框向下移动时,窗体的背景图像在图片框之前所在的位置闪烁。如果不使用任何背景图像,则不会出现闪烁问题。
是否有任何图形加速器或任何解决方案可用于解决闪烁问题?
3个回答

3

3
这个术语叫做“双缓冲”。这个想法很简单——从两个面板开始,但只显示一个。绘制到隐藏的面板上,然后快速交换隐藏和可见的面板。为每个过渡(动画)重复这个过程。
幸运的是,在.NET中,你不必处理这方面的细节,控件会为你完成这些工作。该SO问题将对你有所帮助:如何在窗体上双缓冲.NET控件?

3
如果您正在开发一个Windows Forms游戏,您真的应该覆盖OnPaint并在每一帧实现精灵的绘制,而不是移动笨重的PictureBox控件。
您会发现,如果使用您提到的方法,即使使用DoubleBuffer,您可能仍会出现闪烁。但是,如果所有绘图都在OnPaint中完成,则DoubleBuffer开始工作。
我进行了快速搜索,并在创建Windows Forms游戏循环上找到了这篇有趣的文章。特别注意GameStateDrawer,它直接对图形上下文进行渲染。

您的建议是正确的,但即使使用了双缓冲仍然会出现闪烁。谢谢。 - Ravi Jain
是的 :) 在转向WPF之前,我在WinForms图形控件上工作了大约5年。使用带有双缓冲的OnPaint方法。您需要创建一个简单的游戏引擎来绘制特定位置的精灵。它会起作用! - Dr. Andrew Burnett-Thompson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接