C# 游戏开发-避免闪烁

C# 游戏开发-避免闪烁,c#,.net,winforms,graphics,C#,.net,Winforms,Graphics,我正在用winforms(C#和.netframework2.0)开发一个类似俄罗斯方块的游戏。 winform有一个背景图像和一个图片框,以500ms的间隔向下移动(指定新位置) 问题是,当图片框向下移动时,表单的背景图像在图片框之前所在的位置闪烁。如果我不使用任何背景图像,那么就没有闪烁 是否有任何图形加速器或任何类型的解决方案可用于解决闪烁问题。在控件上设置DoubleBuffered=true。这将有助于防止闪烁 有关双缓冲属性的文档,请参见此处: 用于此的术语是双缓冲。想法很简单-从两

我正在用winforms(C#和.netframework2.0)开发一个类似俄罗斯方块的游戏。 winform有一个背景图像和一个图片框,以500ms的间隔向下移动(指定新位置)

问题是,当图片框向下移动时,表单的背景图像在图片框之前所在的位置闪烁。如果我不使用任何背景图像,那么就没有闪烁


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

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

有关双缓冲属性的文档,请参见此处:

用于此的术语是
双缓冲
。想法很简单-从两个窗格开始,但只显示一个窗格。绘制到隐藏窗格,并快速交换隐藏窗格和可见窗格。冲洗并重复每个过渡(动画)


幸运的是,您不必在.NET中处理这些细节,控件会为您完成这些。这个SO问题将帮助您:

如果您正在Windows窗体中开发游戏,您确实应该覆盖绘制并在每个帧上实现精灵绘制,而不是移动重量级PictureBox控件

你会发现,如果你使用你提到的方法,你可能会得到闪烁,而不考虑双缓冲区。然而,在OnPaint中完成所有绘图后,DoubleBuffer开始工作


我快速搜索了一下,发现了这篇关于使用OnPaint覆盖的有趣文章。特别是看看
GameStateDrawer
,它直接渲染到图形上下文

你的建议是正确的,我在使用双缓冲后仍然会出现闪烁。谢谢。是的:)在切换到WPF之前,我在WinForms图形控件上工作了大约5年。使用带有双缓冲区的OnPaint方法。您将需要创建一个粗糙的游戏引擎来绘制特定位置的精灵。它会成功的!