用Delphi DirectX开发简单RPG游戏1

2008-04-09 04:19:53来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

  提到 RPG (角色扮演游戏,Role Play Game),在座各位恐怕没有不熟悉的。从古老经典的 DOS 版《仙剑奇侠传》到新潮花哨的《轩辕剑》系列,无不以曲折优美的故事情节,美丽可人的主角,悦耳动情的背景音乐,震撼了每一个玩家的心灵。而说到 RPG,就不能不提 DirectX,因为 PC 上大部分的 RPG 都是用这个冬冬开发的。早在《轩辕剑叁外传——天之痕》推出的时候,我就曾想过用 DirectX 写一个自己的 RPG,自己来安排故事情节的发展,却总是因为这样或那样的事情,一直没有能够实现这个心愿。在耗费了宝贵的几年青春,搞定了诸如考试、恋爱、出国等琐碎杂事之后,我终于可以在这个 SARS 肆虐的时代,坐在陪伴了我整个大学生涯的电脑前,听着颓废而又声嘶力竭的不知名歌曲,写一些一直想写却没有写的东西。

DirectX 简介

  DirectX 对于大多数游戏爱好者来说都不陌生(当然,那些只在DOS下艰苦作战的朋友例外),在安装一个游戏前,系统总是会提示你是否需要同时升级 DirectX。简单地说,DirectX 就是一系列的 DLL (动态连接库),通过这些 DLL,开发者可以在无视于设备差异的情况下访问底层的硬件。DirectX 封装了一些 COM(Component Object Model)对象,这些 COM 对象为访问系统硬件提供了一个主要的接口。首先,我们先来看一下 DirectX 的结构:

图1:DirectX 基本结构

  DirectX 目前主要由以下七个主要部分组成:

DirectDraw – 为程序直接访问显存提供接口,同时和其它的Windows应用程序保持兼容。
Direct3D – 为访问3D加速设备提供接口。
DirectInput – 为各种输入设备提供接口,比如鼠标,键盘,力反馈游戏手柄和操纵杆等。
DirectPlay – 为游戏提供网络功能接口,比如支持通过 TCP/I、IPX 等协议进行游戏中的数据传输。
DirectSound – 为访问声卡提供接口,支持WAV、MIDI 等文件的直接播放。
DirectSound3D –通过此接口,可以模拟出某一个声音在三维空间中任何一个位置的播放所产生的效果,从而达到逼真的环绕立体声。
DirectMusic – 此接口主要是生成一系列的原始声音采样反馈给相应的用户事件。

开发工具(Delphi & DelphiX)

  下一步,我们来介绍开发工具。我们通常所安装的其实只有 DirectX 的运行库(一系列封装好的DLL文件),其内部函数结构非常复杂,所以我们还需要 DirectX 的开发工具。所谓工欲善其事,必先利其器,虽然微软公布了 DirectX SDK,但是由于所有的头文件都是用 C/C 写成的,作为 Delphi 的热情拥护者,我们还是无从下手。把 C/C 写成的代码转换成 Pascal 可不是一件容易的事,但是不必担心,这项工作已经有人做好了。日本人 Hiroyuki Hori 为 Delphi 写了一个免费的组件包,称作 DelphiX。这些组件可以使得开发者可以轻松地访问 DirectX 的 DirectDraw、Direct3D、DirectSound、DirectInput(支持力反馈手柄)和 DirectPlay 对象。目前的 DelphiX 包支持 Borland Delphi 3/4/5/6/7 和 DirectX 7.0 以上版本(见图2)。安装了 DelphiX 之后,我们将不需要再安装微软的 DirectX SDK。在这篇文章里我们将使用的就是 DelphiX。

TDXDraw DirectDraw 和 Direct3D 组件
TDXDIB 容纳DIB(设备无关位图,Device Independent Bitmap)的组件
TDXImageList 图片列表组件
TDX3D Direct3D 组件 (和TDXDraw一起使用)
TDXSound DirectSound 组件
TDXWave 容纳 Wave(波形音频文件)的组件
TDXWaveList Wave文件列表组件
TDXInput 输入组件,包括键盘和手柄输入
TDXPlay 通讯组件,用于网络游戏开发
TDXSpriteEngine 精灵引擎,用于管理游戏中产生的精灵(Sprite)详见游戏开发过程
TDXTimer 高速定时器,比 TTimer 要更快,更准确
TDXPaintBox TpaintBox 的 DIB 版本
TDXForm 优化过的 TForm,专门用于游戏开发

动画原理

  在介绍动画的原理之前,我们先来介绍几个DirectX的术语。

表面(Surfaces)

这里我们暂且称作表面吧。在 DirectX 中,显存中被用来存储各种位图和视频缓冲的部分均被称作表面。而当前被显示在屏幕上的表面被称作主表面(primary surface)。在实验动画的过程中,我们通常要预先生成至少一个不显示的表面,称作后台表面(offscreen surface)。在需要产生动画的时候,我们可以直接将后台表面中的内容显示到屏幕上,而将原来主表面翻转到后台而不再显示。这么说可能大家更容易明白,我们大家在小的时候都玩过在书上画小人的游戏吧。在每页书的下方空白处画上一个个小人,每页上的内容逐渐发生变化,然后快速翻动整本书,就可以看到有小人在跳动。我们现在的主表面就是你现在正看到那页书,后面的那些还没有翻到的页面就是后台表面,通过翻动实现了动画效果。在运行一些大型游戏的时候,在显存已经用完的情况下,游戏将自动调用系统内存。目前而言,想要流畅地运行一个 DirectX 游戏,非 3D 类的最好有 4M 以上的显存,3D 类的则显存越大越好。

每秒帧数(Frames per Second)

通常简称 FPS,用我们刚才举的例子来描述,也就是指我们每秒所翻过的书的页数。当帧数达到24帧每秒时,人眼已经无法分辨,从而认为画面是连续的。电影采用的24帧每秒,而电视采用的是25帧每秒。实际上,在日本的动画制作中有一拍二(12帧每秒)甚至一拍三(8帧每秒)的做法,同样可做出欺骗肉眼的效果,这个我们暂且不作讨论。在游戏中,我们将采用24帧或25帧每秒的速度以达到欺骗肉眼的效果。

位图和精灵(Bitmaps and Sprites)

精灵是指在游戏中用来实现动画效果的一组图片,这些图片通常采用位图格式,并且有用特定颜色填充的透明区域。如下图,就是一个精灵。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Delphi一点通:如何将源代码学好

下一篇:用Delphi DirectX开发简单RPG游戏2