该游戏为实时性游戏,为保证流畅,采用了游戏常用的60fps的帧率。每一帧绘制的内容包括背景图片、当前比 分、火柴人以及羽毛球。
下面分别介绍绘图部分的各个细节:
半透明图片
常见的GDI库只能绘制BMP图片,其附带的透明选项也只是选取图片左上角像素作为透明颜色,并不能实现真 正的半透明绘图,画出的图片常会带有丑陋的白边。
为了解决这一问题,我们使用了GDI+库,它支持各种各样的图片格式,当然也就包括含有透明通道的PNG格 式。有了GDI+,我们也就实现了更为精美的游戏画面。
双缓冲绘图
绘制出图片并完成一些简单的动画后,我们发现在刷新一帧时,画面会出现闪烁。想到以前使用MFC编程时 曾接触过双缓冲绘图方法。画面出现闪烁的原因是绘图时多次把像素转移到屏幕上,而双缓冲可以先在内存 中建立起一块画布,等到在内存中全部绘完,再调用BitBlt函数将像素逐个复制到屏幕上。这样便避免了画面 的闪烁。
局部刷新
GDI+固然比GDI功能强大,但它绘图效率低是不容忽视的问题。与Direct2D使用显卡绘图不同,GDI+使用的 是CPU,再加上我们的游戏需要绘制很多元素,对绘图优化就显得很有必要。我们注意到,切换一帧时,并 不是全部元素都需要重新绘制,因此也就可以使用局部刷新技术,只重绘更新了的区域。
人物动画
在FLASH中,开发者可添加一种名为影片剪辑的元素,它可以做与主时间轴异步的动画,影片剪辑可以极大地 方便动画的制作。然而,汇编语言并没有强大的动画制作工具,实现精细的动画也就需要很复杂的处理。