我正在开发中的WinForms像游戏中的俄罗斯方块(C#和.netframework 2.0)。 在WinForm具有背景图像和图片框,其向下移动(新位置被分配)在500毫秒的间隔。
当画面框,其中所述图片框较早位于点下移形式闪烁的背景图片的问题。 如果我不使用任何背景图片,那么就没有闪烁。
是否有任何图形加速器或任何形式的使用,其闪烁的问题是可以解决的解决方案。
我正在开发中的WinForms像游戏中的俄罗斯方块(C#和.netframework 2.0)。 在WinForm具有背景图像和图片框,其向下移动(新位置被分配)在500毫秒的间隔。
当画面框,其中所述图片框较早位于点下移形式闪烁的背景图片的问题。 如果我不使用任何背景图片,那么就没有闪烁。
是否有任何图形加速器或任何形式的使用,其闪烁的问题是可以解决的解决方案。
用于这一术语是Double Buffering
。 这个想法很简单 - 先从2个窗格,但只显示一个。 画一个隐藏的窗格,并迅速交换隐藏和可见的窗格。 冲洗和重复每一个过渡(动画)。
幸运的是,你不必处理.NET中的螺母和螺栓这样,控制为你做它。 这太问题可以帮助你: 如何在窗体上双缓冲.NET控件?
设置DoubleBuffered = true
在你的控制。 这将有助于防止闪烁。
有关文档DoubleBuffered
属性,在这里看到:
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.doublebuffered.aspx
如果您正在开发Windows中的游戏窗体你真的应该是压倒一切的OnPaint和每一帧执行精灵的绘画,而不是移动重量级的PictureBox控件。
你会发现,你可能会闪烁,无论双缓冲的,如果你使用你所提到的方法。 然而,与所有在OnPaint中绘制完成,然后双缓冲开始工作。
我做了快速搜索,发现这个有趣的文章上创建Windows窗体游戏循环使用的OnPaint覆盖。 特别是看看GameStateDrawer
直接做渲染图形上下文。