游戏开发论坛

 找回密码
 立即注册
搜索
查看: 7514|回复: 9

用DELPHI开发DirectX游戏

[复制链接]

62

主题

331

帖子

366

积分

中级会员

Rank: 3Rank: 3

积分
366
QQ
发表于 2004-4-5 14:17:00 | 显示全部楼层 |阅读模式
标题     用DELPHI开发DirectX游戏    pankun(原作)  
  
关键字     DirectX 游戏 Delphi
  


  这不是一篇关于DirectX的祥细教程,而是讲解如何用DELPHI开发DirectX游戏.因为不管是网上或是书店,关于DirectX的书基本上是用C++或VC描述的.用DELPHI开发游戏的资料是少之又少,这篇文章的目的就是让读者能够学会如何利用已有的资料学习来开发游戏.
  这篇文章面向的是对DirectX有一定了解,却不知道如何在DELPHI下开发DirectX游戏的读者.

推荐参考资料:
<<游戏编程指南>>,<<DirectX中文收册>>

DELPHI能不能开发游戏?
  回答是当然,网上很多游戏论坛有不少人都认为开发游戏只能用C++或VC. DELPHI只适合来做做桌面应用,劝有这些观点的人先反汇编看看DELPHI和VC编释出来的代码,或是看看"奇迹时代"这个游戏,"奇迹时代"就是用DELPHI开发的,速度和画面优于帝国时代.DELPHI是完全面向对象,并能内嵌汇编,支持MMX指今(DELPHI中MMX寄存器为mm0-mm7).完全适合游戏开发的需要.其实不论VC,DELPHI都只是工具,只要内功好都能做出来好的程序或是游戏.

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

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

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

先让我们来看看用C++和DELPHI初始化DirectDraw对像的代码段.
c++版:
BOOL InitDDraw( )
{
  LPDIRECTDRAW7 lpDD; // DirectDraw对象的指针
  if ( DirectDrawCreateEx (NULL, (void **)&lpDD, IID_IDirectDraw7, NULL) != DD_OK )
    return FALSE;    {创建DirectDraw对象}
  {里使用了 if ( xxx != DD_OK) 的方法进行错误检测,这是最常用的方法}
  if (lpDD->SetCooperativeLevel(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
基本上只是前缀不一样,由于篇幅,这儿就不一一列出所有对像和结构了.

[em18]

0

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2004-8-18 16:31:00 | 显示全部楼层

Re:用DELPHI开发DirectX游戏

我想学习游戏开发,你能不能给我一个DELPHI中用directX的例程。

另外,使用directX有哪几种方式,我知道可以用API写,我看了你的贴子,都是使用一些组件什么,
请指点一下!

62

主题

331

帖子

366

积分

中级会员

Rank: 3Rank: 3

积分
366
QQ
 楼主| 发表于 2004-8-19 08:56:00 | 显示全部楼层

Re:用DELPHI开发DirectX游戏

下面就有几个文章
可以看下子

0

主题

21

帖子

21

积分

注册会员

Rank: 2

积分
21
发表于 2004-9-5 21:17:00 | 显示全部楼层

Re:用DELPHI开发DirectX游戏

楼主的文章放在何处啊,可否将源代码也放出来分享一下,谢谢!!!

11

主题

188

帖子

194

积分

注册会员

Rank: 2

积分
194
发表于 2004-10-1 22:57:00 | 显示全部楼层

Re:用DELPHI开发DirectX游戏

强烈   支持,,放出源码

4

主题

34

帖子

34

积分

注册会员

Rank: 2

积分
34
发表于 2004-12-9 16:07:00 | 显示全部楼层

Re:用DELPHI开发DirectX游戏

是啊。什么时候有个例子给大家参考啊。

2

主题

30

帖子

30

积分

注册会员

Rank: 2

积分
30
发表于 2005-9-10 19:24:00 | 显示全部楼层

Re:用DELPHI开发DirectX游戏

强烈要求有个例子.这样才学得快呀,要不就是瞎子摸象呀

2

主题

15

帖子

20

积分

注册会员

Rank: 2

积分
20
发表于 2006-1-4 16:22:00 | 显示全部楼层

Re:用DELPHI开发DirectX游戏

JEDI的封装太麻烦了,经常摸不着火门,最近才看懂几个例子

1

主题

24

帖子

30

积分

注册会员

Rank: 2

积分
30
发表于 2006-1-4 18:35:00 | 显示全部楼层

Re:用DELPHI开发DirectX游戏

这么老的贴子都翻出来了,兄弟们要加油啊

2

主题

16

帖子

22

积分

注册会员

Rank: 2

积分
22
QQ
发表于 2006-1-8 12:45:00 | 显示全部楼层

Re: 用DELPHI开发DirectX游戏

sorceress: 用DELPHI开发DirectX游戏
注意:
  如果你是使用DELPHI7的话,请把DirectDraw.pas中的145行{$IFDEF VER140}改为{$IFDEF VER150}才能正常编释.

没太注意,不过我编译的时候好像没问题
------------------
abc
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-23 04:11

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表