用DELPHI开发DirectX游戏
这不是一个关于DirectX的详细教程,而是关于如何用DELPHI开发DirectX游戏的讲解,因为关于DirectX的书籍,无论是网上的还是书店里的,基本都是用C++或者VC描述的,用DELPHI开发游戏的资料很少。这篇文章的目的是让读者学会如何利用现有的资料来学习如何开发游戏。本文针对对DirectX有一定了解,但不知道如何在DELPHI下开发DirectX游戏的读者。& lt游戏编程指南> & gt& lt& ltDirectX中文收藏> & gtDELPHI可以开发游戏吗?答案当然是肯定的。很多网游论坛很多人认为开发游戏只能用C++或者VC DELPHI,只适合桌面应用。有这些观点的,建议先拆开看看DELPHI和VC编的代码,或者看看奇迹时代。游戏的奇迹时代是用DELPHI开发的速度和画面都比帝国时代好。DELPHI是完全面向对象的,可以嵌入汇编分支。持有MMX指令(DELPHI中MMX注册为mm mm)完全适合游戏开发的需要。其实不管VC DELPHI只是一个工具,只要内功好,就能做出好的程序,或者为第二场做准备。目前用DELPHI开发DirectX游戏有两种选择。一种是用jedi的DirectX语句(/ delphi jedi)。另一种是使用Delphi控件。在这里,我们将使用jedi的DirectX声明包来开发DirectX游戏。之所以选择DirectX声明包,是因为我们用SDK开发游戏。如果需要切换到其他语言,就不用再学DirectX了。至于德尔福控件,我没用过,但偶尔也不会用日系产品。在以下地址下载DirectX声明包(//kuganet/download/files/DirectX rar)并解压到自己定制的目录下,然后在DELPHI中选择Tools >即可;环境选项在打开的窗口中,选择库选项卡,点击库路径后面的按钮,会弹出一个目录窗口。然后单击Greedy Items表示失效路径右侧的按钮,选择提取DirectX语句的目录,然后单击ADD按钮。就是这样。将DirectX语句所在的目录添加到DELPHI的库路径中,在uses中可以直接引用DirectX语句中的单位。这个声明包附带了几个例子,可以作为入门的参考。3.调试经验开发全屏游戏时,最好在设计时将屏幕分辨率设置为与游戏相同的分辨率,避免调试时频繁切换分辨率,损坏屏幕开发全屏游戏。游戏最好在WIN /XP,否则游戏进入死循环或者调试时产生异常,机器很容易切换到DELPHI。当全屏游戏在/XP下进入死循环时,可以按ALT+TAB切换到Delphi(但此时因为DirectX游戏是全屏的,不会在屏幕上变化,所以要多试几次)。按CTRL+F结束游戏。如果不正常,切换到DELPHI,先回车再CTRL+F结束调试游戏。注意:如果你使用的是DELPHI,请将DirectDraw pas中的行{$IFDEF VER}改为{$IFDEF VER}。为了正常编译和解释,最好使用API来构建游戏的主窗口,而不是使用VCL的TFORM类。先来看看用C++和DELPHI初始化DirectDraw对象的代码段c++版:boolinit DDRAW(){ lpDirectDraw LPDD;//指向DirectDraw对象的指针if(DirectDraw createex(null(void * *))&;lpDD IID_IDirectDraw NULL)!= DD_OK)返回FALSE{创建DirectDraw对象} {if (xxx!= DD_OK),这是最常用的方法} if(lpDD > SetCooperativeLevel(hwnd DDSCL _ EXCLUSIVE | DDSCL _ full screen)!= DD_OK)返回FALSE{设置DirectDraw控制级别} If(lpdd >;set display mode(DDSDM _标准模式)!= DD_OK)返回FALSE{显示模式}}DELPHI版本:function t form init directdraw:Boolean;varlpDD:IDirectDraw;begin result:= False;{假设初始化首先失败} {创建DirectDraw对象}如果DirectDraw createex(nilpddiid _ idirectdrawnil)< & gt;DD_OK退出;{如果lpdd setcooperativelevel(hwnd ddscl _ exclusive或ddscl _ full screen)< & gt;DD_OK退出;{将显示模式的第一个和第二个参数设置为分辨率;第三个参数用于设置显示模式中的颜色位数;第四个参数将屏幕的刷新率设置为默认值;如果lpdd设置显示模式(ddsdm _ standardvgmode),则第四个参数的唯一有效值是ddsdm _ standardvgmode}