我正在尝试将一个小图像从左侧移动到屏幕右侧。
我将用户控件的样式设置为:
this.SetStyle(ControlStyles.Opaque, true);
this.SetStyle(ControlStyles.UserPaint, true);
this.SetStyle(ControlStyles.ResizeRedraw, true);
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
在我的OnPaint
处理程序中,我将对象绘制到一个BufferedGraphics
实例,这是我的屏幕外缓冲区,然后e.Graphics
使用单个调用将结果 BitBlt 到引用。
因此,我似乎按照书本做了所有事情,以进行超流畅的无闪烁绘图,但我仍然可以看到对象有点口吃。
所以基本上剩下两种可能性:正在调用的 Timer.Invalidate(DirtyRect)
没有以恒定的时间间隔精确触发,导致对象出现断断续续的现象,或者 BitBlt 没有按预期工作。
有谁知道可能是什么问题?
更新:再想一想,它看起来更像是撕裂,而不是口吃或闪烁。因为有时对象似乎错过了最后几个像素。我将研究利用 VSYNC 的可能性。