我正在用 winforms(C# 和 .netframework 2.0)开发一个类似俄罗斯方块的游戏。winform 有一个背景图像和一个图片框,它们以 500 毫秒的间隔向下移动(分配了新的位置)。
问题是当图片框向下移动时,表单的背景图像会在图片框之前所在的位置闪烁。如果我不使用任何背景图像,则没有闪烁。
是否有任何图形加速器或任何类型的解决方案可以解决闪烁问题。
设置DoubleBuffered = true
在您的控件上。这应该有助于防止闪烁。
有关该DoubleBuffered
属性的文档,请参见此处:http:
//msdn.microsoft.com/en-us/library/system.windows.forms.control.doublebuffered.aspx
用于此的术语是Double Buffering
。这个想法很简单 - 从 2 个窗格开始,但只显示一个。绘制到隐藏窗格,并快速交换隐藏和可见窗格。冲洗并重复每个过渡(动画)。
幸运的是,您不必在 .NET 中处理这些细节,控件会为您完成。这个 SO 问题将对您有所帮助:如何在表单上加倍缓冲 .NET 控件?
如果你在 Windows 窗体中开发游戏,你真的应该重写 OnPaint 并在每一帧上实现精灵的绘制,而不是移动重量级的 PictureBox 控件。
如果您使用您提到的方法,您会发现无论 DoubleBuffer 是什么,您都可能会得到闪烁。然而,在 OnPaint 中完成所有绘图后,DoubleBuffer 开始工作。
我进行了快速搜索,发现这篇关于使用 OnPaint 覆盖在 Windows 窗体中创建游戏循环的有趣文章。特别是看看GameStateDrawer
哪个直接渲染到图形上下文。