在写大作业的时候一开始用gdi+,可以手写出双缓冲,后来因为性能问题和环境配置问题转用direct2d,却在双缓冲的问题上卡顿许久,并且画出的图形也有很明显的闪烁。查阅国内博客许久依然没有答案,于StackOverflow上见一提问:
https://stackoverflow.com/questions/42332131/double-buffering-in-direct2d
与此篇文档:
两者指出在d2d中,RenderTarget本身的特性就是双缓冲,不同的是,对于客户区的绘制 是在RenderTarget::EndDraw()之后完成,至此真相大白。
之前的code:

mapShow()函数和drawImage()函数中均有一对pRenderTarget->BeginDraw()和pRenderTarget->EndDraw(),在这样的情况下,每一次重绘都分两步完成:绘制背景和绘制飞行物。
将代码改为:

在 mapShow()函数和drawImage()函数中把BeginDraw()和EndDraw()中都去掉,
这样就能将背景和飞行物同时绘制入缓冲后一次性绘制到客户区。
最后效果:

闪烁问题解决!
浙公网安备 33010602011771号