游戏开发 - 避免闪烁

时间:2012-05-24 08:13:44

标签: c# .net winforms graphics

我在winforms(C#和.netframework 2.0)中开发了类似游戏的俄罗斯方块。 winform有一个背景图像和一个向下移动的图片框(新的位置被分配),间隔为500毫秒。

问题是当图片框向前移动图片框之前的表格闪烁的背景图像时。如果我不使用任何背景图像,则没有闪烁。

是否有任何图形加速器或任何类型的解决方案可用于解决闪烁问题。

3 个答案:

答案 0 :(得分:3)

在控件上设置DoubleBuffered = true。这应该有助于防止闪烁。

有关DoubleBuffered属性的文档,请参阅此处:
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.doublebuffered.aspx

答案 1 :(得分:3)

用于此的术语是Double Buffering。这个想法很简单 - 从2个窗格开始,但只显示一个窗格。绘制到隐藏窗格,然后快速交换隐藏窗格和可见窗格。冲洗并重复每次转换(动画)。

幸运的是,你不必处理.NET中的这些细节,控件就是为你做的。这个问题可以帮助您:How to double buffer .NET controls on a form?

答案 2 :(得分:3)

如果您正在使用Windows窗体开发游戏,那么您应该重写OnPaint并在每个帧上实现精灵的绘制,而不是移动重量级的PictureBox控件。

如果你使用你提到的方法,你会发现无论DoubleBuffer如何,你都可能得到闪烁。但是,在OnPaint中完成所有绘图后,DoubleBuffer开始工作。

我进行了快速搜索,并使用OnPaint覆盖在creating a game-loop in Windows Forms上找到了这篇有趣的文章。特别是看看GameStateDrawer,它直接渲染到图形上下文。