目前用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
基本上只是前缀不一样,因为篇幅,这儿就不一一列出所有对像和构造了.