废话少说,先看看程式运行后的效果:
(假如没有出现,请耐心的稍等片刻)
请各位原谅我的时间有限,编程的细节我就不多讲了,只介绍一下大致的实现方法。
在DirectX中,页面(Surface)是最基本的对象,我们用他来装载位图,页面有很多种,有:
- 主页面(Primary Surface):代表我们可见的显示器屏幕
- 后台缓存(Back Buffer):换页用的另一个后备页面,不可见
- 离屏页面(Off Screen Surface):用来储存图象的页面,不可见
这个程式中三种页面都用到了。首先将两幅图象:一幅武士、一幅背景分别载入到两个离屏页面上。请注意,武士的图片上我们使用了源关键色。
- 源关键色:页面上被假设为透明色的颜色,这种颜色在Blit中作为透明
假如您仔细观察一下武士的图片,就会发现武士图象的背景上是绿色,这就是我所使用的源关键色。
然后的工作就是配置一个定时器,每隔一定的时间让屏幕进行一次换页,在这个过程中,需要分别将两幅离屏页面中的位图Blit到后台缓存上,这个时候,需要计算一些坐标数据,这些逻辑方面的问题我就不多说了,因为这些 --的东西,一说就糊涂,您还是自己去思考吧,总之,您需要控制好Blit的源和目标矩形。因为这个程式我使用的是全屏模式,所以使用了换页操作。
- 换页:将后台缓存和前台缓存(主页面)的指针进行交换,使屏幕上的画面在瞬间更新(因为换页是硬件完成的,很快速,所用的时间和刷新率是同样的数量级),所以根本就观察不到闪烁的现象。
好了,这个程式大致就是这样的了,他是在VC 5.0环境下,直接利用DirectDraw编写的,没有使用CDX等包装类库。
这里附带可执行文档和源代码,内有比较周详的注释,下载MovePic.zip(190k)。假如有问题,请一定告诉我哟。
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




