现在只要在Form_Paint()和Form_Resize()中加入this.draw()任意改变窗体大小也可以正确显示图片了。接下来我们要在我们的Frm上来显示我们的角色了;这样我们还需要一个Surface,用来存放我们将要显示的角色。角色运动是由很多的图片连续播放的道德,一般我们都习惯于将这些图片全部都做到一个文件里面(如下图),需要哪个角色就显示那个区域就可以了。
代码实现如下: DirectDraw之C#初步掌握攻略3
rect.Top=0;
rect.Left=0;
rect.Bottom=dDDesc2.lHeight;
rect.Right=140;//Actormove.bmp每个动作之间的距离是140;显示的是第一个动作;
rectSec.Top+=60;
rectSec.Left+=30;
rectSec.Bottom-=(rect.Bottom-rect.Top)/2;
rectSec.Right-=(rect.Right-rect.Left)/2;
dDsurface.Blt(ref rectSec,dDsurfaceActor,ref rect,DxVBLib.CONST_DDBLTFLAGS.DDBLT_WA99v);
我们看到的角色只是实际图片的一部分 DirectDraw之C#初步掌握攻略3
由于原图本身背景是黑色的,blt的时候就连角色一起画进去了。这个时候我们需要用到colorKey来屏蔽我们不需要的背景色。代码段如下:
dDcolorKey.high=20; file://被屏蔽
dDcolorKey.low=0; file://的颜色介于这两者之间
dDsurfaceActor.SetColorKey(DxVBLib.CONST_DDCKEYFLAGS.DDCKEY_SRCBLT,ref dDcolorKey);
dDsurface.Blt(ref rectSec,dDsurfaceActor,ref rect, DxVBLib.CONST_DDBLTFLAGS.DDBLT_WA99v |DxVBLib.CONST_DDBLTFLAGS.DDBLT_KEYSRC);
这会就可以看到正确的人物了。 DirectDraw之C#初步掌握攻略3
到这里DirectDraw的工作就只是剩下键盘的响应函数就已经基本实现了一个简单的游戏地图引擎了,是不是也并不是很难?至于键盘相应函数原理很简单,只要在键盘按下的时候刷新form然后按顺序显示人物图标同时rect的值随之改变就可以了。要是有兴趣的话可以自己试试看。DirectDraw绘图的速度很快,除了做游戏外还可以用来播放AVI甚至是MEPG文件或者是屏保,只要搭配相应的文件转换和解码模块使用就可以。好了,关于DirectDraw的介绍就道这里了。