×

DirectDraw之C#初步掌握攻略1

Kalet Kalet 发表于2009-03-20 12:00:14 浏览272 评论0

抢沙发发表评论

DirectX本身为游戏开发的一套SDK,其本身原来仅仅是用来与OpenGL,3DFX竞争的一套用于视频游戏开发的SDK.。现在Microsoft已经发布其8.1版本。到DirectX7为止DirectX已经成为一套功能齐全的多媒体开发SDK.。由于其易用(相对于GDI API)高效也就成为了视频播放,3D绘图等高质量多媒体程序(high-performance multimedia applications)的良好开发平台。由于Microsoft在软件业的霸主地位,使得DirectX得到了众多的显卡厂商的广泛支持。换句话说,用DirectX编程就完全可以不用去管显卡的品牌和型号,专心和DirectX打好交道,剩下的由DirectX和Windows再交流解决了。

   DirectX的DirectDraw用于2D绘图,与Windows的API相比,DirectDraw更为安全,而且更增加了一些实用的方法用于图形的转换和修改。DirectInput则提供了用于管理输入设备的方法,在这里所有的Joystick都可以一律看待,极大的简化了Joystick的使用。DirectMusic和DirectSound不用说大家也能想到是音乐和声效的控制手段,尽管现在很多的游戏都采用MP3播放背景音乐,但是DirectMusic的方便和功能强大还是值得一看的。至于Direct3D和DirectPlay是用于3D绘制和联网游戏,尽管都是正红火的游戏形式,但因为D3D比较复杂,就只有留下D3D和DPlay以后再专门介绍了。由于DirectX本身是一套底层(low-level)的程序接口,也就是说它就是一套API,所以DirectX编程需要用到大量的指针用于对系统显存和系统内存进行直接操作以换取更快的执行效率,所以起初DirectX使仅用于C++的。从DirectX7开始,DirectX都有VB的运行库,那些复杂的指针操作统统被转换成了普通的变量操作,这也就是为什么能用C#开发DirectX程序的原因。 DirectDraw之C#初步掌握攻略1


   由于我今天才拿到DirectX8.1的SDK,所以这里的程序都使用DirctX7vb运行库开发。DirectX结构复杂,功能烦多,掌握起来并不像数据库开发那么明了,所以在此我仅仅是对其简单的介绍其基本功能的介绍。但是也不用还怕DirectX下面的众多功能接口的使用的基本方法是一样的,归结下来实现基本功能一般的必要步骤如下:

   1.创建接口DirectX7.DirectXXXCreate();(XXX代表Input&Music&Draw….)

    如:ddraw=dx.DirectDrawCreate("");

   2.环境设置

    如:
    ddraw.SetCooperativeLevel(frm.Handle.ToInt32(),
              DxVBLib.CONST_DDSCLFLAGS.DDSCL_FULLSCREEN|
              DxVBLib.CONST_DDSCLFLAGS.DDSCL_ALLOWMODEX|
              DxVBLib.CONST_DDSCLFLAGS.DDSCL_EXCLUSIVE);

   环境设置有时需要枚举(enumerate)来获得正确的可用设置.

   3.创建操作实体

    如:DDsurface=ddraw.CreateSurface(ref dDDesc);

   4.对实体进行操作

    如:DDsurfaceSpt.SetColorKey(DxVBLib.CONST_DDCKEYFLAGS.DDCKEY_SRCBLT,ref DDColorKey);

   有了这4个步骤,也就基本上了解了DirectX编程的思路了,下面需要的就是寻找实现步骤的具体解决方法。我们先从DDraw开始,先做一个可以在背景上移动的(spriter)角色。然后再让他走动时发出声音(DSound),最后配上背景音乐(DMusic),这样一个游戏的基本要素也就差不多齐全了,剩下该让他干点什么,就要看你的相像力了,在发挥想象力之前,还是先写代码吧!

   建立一个project需要一个窗体(Form),引用Direct7 ,不要想引用DirectX8代替DirectX7,DirectX8没有DirectDraw我也不知道为什么没有了,可能是在D3D表面也可以绘制2D的原因吧!接着我们可以去掉多余的引用留下System.,System.Windows.Forms和DxVBLib(它可是主角哦)就可以了。DirectX就是绘图用的所以…System.Drawing就没用了,不过还是把System.Drawing留下来,后面访问Form位置的时候还是要用它。 DirectDraw之C#初步掌握攻略1


   接着定义DirectX7接口

    private DxVBLib.DirectX7 dx=new DxVBLib.DirectX7();

   好了准备工作已经做完了,下面就正式开始DirectDraw部分;
DirectDraw篇

   DxVBLib.DirectDraw7 dDraw

   按照刚才所说的步骤,先由dx-------DirectX7结构实体来创建一个DDraw接口实体用来完成后面的步骤;
DxVBLib.DirectDraw7 dDraw=dx. DirectDrawCreate(guid);

  GUID是一个长达128位的结构(Structrue),是接口的代号对每一个借口都是不同的,可以用dx.CreateNewGuid()或者System.Guid.NewGuid().ToString()获得。其实我们在这里并不需要通过这个GUID接口来访问DDraw接口的实体,所以让GUID=""就可以了.

   设置DDraw的显示方式;

dDraw. SetCooperativeLevel(this.Handle.ToInt32(),
DxVBLib.CONST_DDSCLFLAGS.DDSCL_NORMAL);

  frm就是当前窗体。这里我们先建立一个非独占的DDraw用来在我们的窗体上显示图像。

DxVBLib.CONST_DDSCLFLAGS.下面的对象可以用于DDraw模式的设置。
file://DxVBLib.CONST_DDSCLFLAGS.DDSCL_FULLSCREEN(全屏模式)
file://DxVBLib.CONST_DDSCLFLAGS.DDSCL_ALLOWMODEX(允许使用ModeX)
file://DxVBLib.CONST_DDSCLFLAGS.DDSCL_EXCLUSIVE(独占模式)

  上面几种是常用的模式。其中后面两种必须与DDSCL_FULLSCREEN一起使用。使用多个参数用以下格式

     参数1|参数2|参数3

   其它的DirectX的参数用法也是相同的,这些参数也就是一些功能的开关,直接会影响到显示的效果。要了解其他参数最好还是看看在线帮助。 DirectDraw之C#初步掌握攻略1

   设置DirectDrawSurface7,Surface是DirectDraw用来存放图像信息和显示图像的内存/显存区域,也就是DDraw控制显示图像的


群贤毕至

访客