如何用DELPHI进行开发?

Posted 技术永远的神

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用DELPHI进行开发?相关的知识,希望对你有一定的参考价值。

目前用DELPHI开发DirectX游戏有二种选择.一是使用jedi的DirectX声明().另一种是使用DelphiX.在这里我们准备使用jedi的DirectX声明包来开发DirectX游戏,之所以选择DirectX声明包是因为这样是以SDK方式来开发游戏,以后如果需要转到其它语言也不必重新学习DirectX.至于DelphiX控件我没用过,没发言权,不过偶是不用日货的 ;-)
先到以下地址DirectX的声明包(//files/directx7.rar">),并解压到你自定的目录中.再在DELPHI中选择Tools->Environment Options,在打开的窗口中选择Library选项卡,点击Library Path后面的按钮.会弹出来一个Directories窗口,再点击Greyed items denote invalid path右边的按钮.选择DirectX声明解压到的目录.再点击ADD按钮,这样就把DirectX声明所在的目录添加到了DELPHI 的Library路径中.就可以直接在uses中引用DirectX声明中的单元了.这个声明包里自带了几个例子,可以作为的参考.

:
开发全屏游戏时最好把设计时的屏幕分辩率设为和游戏一样的分辩率,以免调试时频繁切换分辩率而损伤屏幕.
开发全屏游戏最好是在/XP下,不然在98下调试时游戏进入死循环或产生异常时.机子很容易就会当掉.在2000/XP下全屏游戏进入死循环时可以按ALT+TAB切换到DELPHI中(但这时由于DirectX游戏是全屏,独占了屏幕,屏幕上不会有变化,所以要多试几次),按CTRL+F2就可以结束游戏.如果是异常的话,切换到DELPHI中先按下回车再按CTRL+F2就可以结束调试游戏了.

注意:
如果你是使用DELPHI7的话,请把DirectDraw.pas中的145行{$IFDEF VER140}改为{$IFDEF VER150}才能正常编释.
最好使用的方式来建立游戏主窗口而不是使用VCL的TFORM类.

先让我们来看看用C++和DELPHI初始化DirectDraw对像的代码段.
c++版:
BOOLwww.sangpi.com InitDDraw( )
{
LPDIRECTDRAW7 lpDD; // DirectDraw对象的指针
if ( DirectDrawCreateEx (NULL, (void **)&lpDD, IID_IDirectDraw7, NULL) != DD_OK )
return FALSE; {创建DirectDraw对象}
{里使用了 if ( xxx != DD_OK) 的方法进行错误检测,这是最常用的方法}
if (lpDD->SetCerativeLevel(hwnd,DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN) != DD_OK )
return FALSE; {设置DirectDraw控制级}
if ( lpDD->SetDisplayMode( 640, 480, 32, 0, DDSDM_STANDARDVGAMODE ) != DD_OK )
return FALSE; {置显示}
}

DELPHI版:
function TForm1.InitDirectDraw: Boolean;
var
lpDD: IDirectDraw7;
begin
Result := False; {先假设初始化失败}
{建立DirectDraw对象}
if DirectDrawCreateEx(nil, lpDD, IID_IDIRECTDRAW7, nil) <> DD_OK then
exit;
{设定DirectDraw的控制级,第一个参数为DirectDraw窗口的句柄,这里把控级级设为的全屏加独占模式}
if lpDD.SetCooperativeLevel(Hwnd, DDSCL_EXCLUSIVE or DDSCL_FULLSCREEN) <> DD_OK then
exit;
{设定显示模式,第一,二个参数为分辩率大小,第三个参数用来设置显示模式的颜色位数,
第四个参数设定屏幕的刷新率,0为默认值,第四个参数唯一有效的值只有DDSDM_STANDARDVGAMODE}
if lpDD.SetDisplayMode(640, 480, 32, 0, DDSDM_STANDARDVGAMODE) <> DD_OK then
exit;
Result := True;
end;

可以看出来,这二段代码除了语法和对象名外完全一样,只要了解了这点,我们完全可以参考VC或C++的资料,然后用DELPHI做出自己的游戏了.DELPHI中DirectX声明中的对象名,结构名和VC不一样,一般的对应关系如下:
DELPHI VC
DirectDraw对象 IDirectDraw7 LPDIRECTDRAW7
页面对象 IDirectDrawSurface7 LPDIRECTDRAWSURFACE7
DirectDraw的页面描述 TDDSurfaceDesc2 DDSURFACEDESC2
基本上只是前缀不一样,由于篇幅,这儿就不一一列出所有对像和结构了.

以上是关于如何用DELPHI进行开发?的主要内容,如果未能解决你的问题,请参考以下文章

如何用Delphi开发网游外挂

Delphi 如何用多线程进行数据采集

delphi 如何用消息发送一个记录

如何用DELPHI对JPG等图像进行缩放?

如何用Delphi开发独立IE内核的浏览器

在delphi中如何用combobox实现分级读取数据库中的内容