現在只要在Form_Paint()和Form_Resize()中加入this.draw()任意改變窗體大小也可以正確顯示圖片了。接下來我們要在我們的Frm上來顯示我們的角色了;這樣我們還需要一個Surface,用來存放我們將要顯示的角色。角色運動是由很多的圖片連續播放的道德,一般我們都習慣於將這些圖片全部都做到一個文件裡面(如下圖),需要哪個角色就顯示那個區域就可以了。
代碼實現如下:
dDsurfaceActor=dDraw.CreateSurfaceFromFile("c:\\actorMove.bmp",ref dDDesc2);
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_WAIT);
我們看到的角色只是實際圖片的一部分
由於原圖本身背景是黑色的,blt的時候就連角色一起畫進去了。這個時候我們需要用到colorKey來屏蔽我們不需要的背景色。代碼段如下:
DxVBLib.DDCOLORKEY dDcolorKey=new DxVBLib.DDCOLORKEY();
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_WAIT |DxVBLib.CONST_DDBLTFLAGS.DDBLT_KEYSRC);
這會就可以看到正確的人物了。
到這裡DirectDraw的工作就只是剩下鍵盤的響應函數就已經基本實現了一個簡單的游戲地圖引擎了,是不是也並不是很難?至於鍵盤相應函數原理很簡單,只要在鍵盤按下的時候刷新form然後按順序顯示人物圖標同時rect的值隨之改變就可以了。要是有興趣的話可以自己試試看。DirectDraw繪圖的速度很快,除了做游戲外還可以用來播放AVI甚至是MEPG文件或者是屏保,只要搭配相應的文件轉換和解碼模塊使用就可以。好了,關於DirectDraw的介紹就道這裡了。