关于动画绘制出现闪烁的问题,我以前就有文章讨论过,好像是在VCOK上,记不清楚了。
消除闪烁的关键并不在于提高速度,我曾经指出过产生闪烁的根本原因在于图像画面的突变。从人的视觉上来讲,绘制一幅画面(A),在将屏幕清除,在绘制一个新的画面(B),这期间人眼的感觉其实是看到了3幅画面,一幅是A,第二幅是清除屏幕时造成的黑屏,第三幅是B。这个过程中,画面是存在突变的,也就是说是不连续的变化。不闪烁的动画效果,多是由连续变化的画面组成的。
可以采用的办法很多,局部擦除,双缓冲等都可以做到。所谓双缓冲,其实只是一种手段,它可以使人眼看不到图形绘制的过程,来消除闪烁。也就是将绘制的过程放在backbuf中进行,而将绘制的结果显示给人眼。如前例,如果将清楚屏幕和绘制B图都放在backbuf中进行,就可以使人眼只看到A和B两幅图,从而消除了画面上的突变,在人眼的感觉上就没有了闪烁。
需要指出的是闪烁的根本在于画面的突变,而不在于采用了何种技术,就算你采用了双缓冲技术,但是最终呈现给人眼的绘制结果本身就是存在画面突变的,那么仍然不可避免的会产生闪烁。闪烁也与程序的速度无关,从本质上讲,显示器本身就是能保证每秒50帧以上的刷新率。因此记住最本质的东西,所谓动画就是连续变化的一组画面,闪烁的根源在于画面的突变。