jumpball1.exe
可见,欲消除“闪烁”,关键是消除“空白”,但是“清空”是不可免除的,不然跑动的人物也许会变成八爪鱼,即拖影;解决办法便是“双缓冲”,即在内存中开辟一与显存等大的单元,将原本在显存中完成的刷新工作转移至该内存中完成,最后一次性写入显存,这样在视觉上便避免了“空白”过程。
在WIN32 API中,提供了高效的Bitblt函数,可实现Bitmap结构的快速搬移。本文基于该函数和“双缓冲”原理,实现了连续动画,消除了“闪烁”:
jumpball2.exe
读者可对比 jumpball1(“闪烁”) 和 jumpball2 (无“闪烁”),并可下载完整源代码,直观的了解这种机制的实现方法。