Delphi作为一种方便的可视化程序设计语言,一直非常受大家喜爱。但它在图形处理、3D表现等方面 不很让人满意。如果说你要开发一个Windows95下的3D游戏,你会用什么工具呢?DirectX!不少人会不加 思索地答道。然而接触过DirectX的朋友们都知道它内部的结构复杂,一般来说结合VC开发是一个理想 的组合。而要在Delphi中利用DirectX SDK真是难上 加难。但现在一切都好啦,有了本文介绍的DelphiX 组件,你终于可以用你熟悉的Delphi来开发漂亮的图 形程序了。

DelphiX是由日本人Hiroyuki Hori开发的使DirectX5.0在Delphi中更容易使用的一套控件,从网上 下载时叫DelphiX.zip,837KB。解开后在bin目录下 运行install_for?(根据你的Delphi版本号,支持3.0和 4.0),DelphiX会自动将控件安装到你的Delphi中,帮 助文件也自动融合到Delphi的帮助里,真是好用极了!

DelphiX 包括的控件有如下这些:
TDXDraw 最重要的控件,是DirectDraw和Direct3D的基础;
TDXDIB   一个代表DIB图像的控件;
TDXImageList 代表一组 Tpicture;
TDX3D    Direct3D控件,要与TDXDraw共同使用;
TDXSound DirectSound控件;
TDXWave 一个代表波形Wave的控件;
TDXWaveList 一组Wave;
TDXInput 输入控制控件(操纵键盘和摇杆要靠它);
TDXPlay 通讯控件;
TDXSpriteEngine "精灵"引擎;
TDXTimer 高速时间控件;
TDXPaintbox TDXForm 专为DelphiX优化过的Form。

DirectDraw中重要的对象有:

TDirectDraw对象
DirectDraw应用程序的核心,它是你创建的第一个对象。创建了DirectDraw对象后,可以在它的基础上创建其它所有相关的对象。在DelphiX中的TDXdraw.ddraw属性即是一个Tdi rectDraw对象。

TDirectDrawSurface对象
表征了一块内存区 域,在该区域的数据将作为图像显示在屏幕上或移动 到其它表面上。

TDirectDrawPalette对象
表征了一个用于表面 的16色或256色的索引调色板,它包含了一系列描述同表面相关的RGB颜色索引值。

TDirectDrawClipper对象
帮助你禁止向表面的 某一位置或超出表面的位置块写数据。

Tsprite对象
代表了"精灵",在许多视频游戏都使用了精灵。从最基本的意义上来讲,一个精灵就是 在屏幕上移动的图像。精灵画在一个表面上,覆盖在 已有的背景上,合成后的图像被送到屏幕上显示出来,在DelphiX中通过TspriteEngine实现对Tsprite的控制。

TDirectDrawSurfaceCanvas对象
提供方便的 访问机制,你可以像访问一般Canvas对象一样访问 它。TDXDraw.Surface.Canvas即是这样一个对象。

TdirectDrawDisplay对象
控制着DirectDraw的显示模式,TdxDraw.display是这样一个对象。

DelphiX基本上严格按照Microsoft DirectX SDK 开发包来将其功能在Delphi中实现出来。所以,如果你对DirectX SDK比较熟悉的话,你会发现大多数程 序从C移植到Delphi是很容易的事。DelphiX中没有提供帮助的地方,你可以在DirectX SDK中获得答案。

下面通过一个简单的例子对如何利用DelphiX编 程作一介绍,只涉及Ddraw二维的一小部分。

Unit Unit1;

interface
uses Windows.Messages, SysUtils, Classes, Graphics,      Controls, Forms, Dialogs,
     DXClass, DXDraws, DIB;
type
TForm1=class(TDXForm)
    DXDraw1:TDXDraw;
    DXTimer1:TDXTimer;
    DXDIB1:TDXDIB;

procedure DXDrawlFinalize(Sender:Tobject);
    procedure DXDraw1Initialize(Sender:Tobject);
    procedure DXDraw1RestoreSurfase(Sender:Tobject);
    procedure DXTimer1Timer(
      Sendsr:Tobject;LagCount:Integer);
    procedure FormActivate(Sender:Tobject);

private
      {Private declarations}
    public
      {Public declarations}
    private
      Fsurface:TDirectDrawSurface;
end;

var
Form1:TForm1;
x,y:integer;

implementation

{$R *.DFM}

procedure TForm1.DXDrawlInitialize(Sender:Tobject);
begin
Fsurface:=TDirectDrawSurface.Create(DXDraw1.Ddraw);
{创建抽象图像表面}
end;

procedure TForm1.DXDraw1Finalize(Sender:Tobject);
begin
Fsurface.Free; Fsurface: = nil;
{释放表面}
end;

procedure TForm1.DXDraw1RestoreSurfare(Sender:Tobject);
begin
Fsurface.LoadfromGraphic(DXDIB1.DIB);
{将位图送入抽象表面}
end;

procedure TForm1.DXTimer1Timer(
Sendsr.Tobject;LagCount integer);
begin
if not DXDraw1.CanDraw then Exit;
    {在绘制之前检验是否允许}
DXDraw1.Surfaca.Fill(0);
x: = x + 1;
y: = y + 1;
DXDraw1.Surface.Draw(X, Y,
    Fsurface.ClientRect,Fsur face, True);
DXDraw1.Flip;
{将内存中的表面再将映射入实际显存}
end;

procedure TForm1.FormActivate(Sender:Tobject);
begin
X: =0;
y: =0;
end;

end.

首先要在程序开头包含DXClass、DXDraws两个 Unit(TDXtimer、TDXForm在DXClass中定义,TDX Draw在DXDraws中定义)。程序用的Form不要从一般的Tform派生,而应从TDXForm中派生。在Form 中放入TDXDraw控件和TDXTimer控件,将其inter val值设为0。对DXDraw1控件改变其属性,使其与 Form大小一致。再放人一个TDXDIB控件,在其属性 中的DIB一项调人一个位图,如Windows下的bubbles.bmp。定义一个DirectDraw表面Fsurface,这是一 个抽象内存表面,以后会将它映射到DXDraw对象的 Surface上。在DXDraw的Events一栏中编写OnIni tialize、OnFinalize、OnRestoreSurface三个过程,之后便 可以根据需要对表面进行操纵。

另外,要完成上面程序的功能,还有其他不少办 法。例如利用TDXImageList对象,可以用它的方法 Imagelist.items[N].draw来完成同样功能。

DelphiX 组件相关推荐

  1. DelphiX教程系列 1 - 使用键盘和摇杆

    用到的组件(TDXInput.TTimer): 原文链接:http://www.delphigamedev.com/tutorials/dxtut1.htm 在这一教程里,我们将会学习如何使用键盘来移 ...

  2. 用Delphi + DirectX开发简单RPG游戏

    http://www.bianceng.cn/delphi/dp16.htm 提到 RPG (角色扮演游戏,Role Play Game),在座各位恐怕没有不熟悉的.从古老经典的 DOS 版<仙 ...

  3. 用Delphi+DirectX开发简单RPG游戏

    提到 rpg (角色扮演游戏,role play game),在座各位恐怕没有不熟悉的.从古老经典的 dos 版<仙剑奇侠传>到新潮花哨的<轩辕剑>系列,无不以曲折优美的故事情 ...

  4. 《Delphi传奇》网络游戏组件安装步骤:Delphi 10.3安装DelphiX

    1.官网下载最新版本DelphiX游戏开发组件:http://www.micrel.cz/Dx/ 欢迎加入Delphi开发局QQ群:32422310 2.解压缩到一个文件夹中,建议不要用英文: 3.启 ...

  5. DelphiX教程系列 4 - 滚动背景 part 1

    用到的组件: (TDXDraw, TDXImageList, TDXSpriteEngine, TDXTimer, TDXInput) 原文链接:http://www.delphigamedev.co ...

  6. DelphiX教程系列 3 - 动画 part 1

    用到的组件(TDXDraw,TDXImageList,TDXSpriteEngine): 原文链接:http://www.delphigamedev.com/tutorials/dxtut3.htm ...

  7. Delphi 与 DirectX 之 DelphiX(25): TDIB.Blur();

    DelphiX 的组件面板上, 第二个就是 TDXDIB; TDXDIB.DIB 是 TDXDIB 的唯一属性(其他是 TComponent 固有的); TDXDIB.DIB 属性是一个 TDIB 对 ...

  8. 第四天:Vue组件的slot以及webpack

    插槽 认识slot 在生活中,很多地方都有插槽,电脑的USB插槽,插板中的电源插槽等. 插槽的目的是让我们原来的设备具备更多的扩展性.比如电脑的USB我们可以插入U盘.鼠标.键盘.硬盘.手机.音响等等 ...

  9. 第三天:Vue的组件化

    1.认识组件化 我们将一个完整的页面分成很多个组件,每个组件都用于实现页面的一个功能块,而每一个组件又可以进行细分. 组件化是Vuejs中的重要思想,它提供了一种抽象,让我们可以开发出一个个独立可复用 ...

最新文章

  1. eclipse中如何将java项目转为java Web项目
  2. 什么事情是你当了老板才知道的?
  3. ACdream 1083 有向无环图dp
  4. 【 Verilog HDL 】不同抽象级别的Verilog HDL模型之门级结构描述
  5. visio 模板_盒图模板一键套用,便捷绘制精美盒图图表
  6. 机器学习该如何应用到量化投资系列(二)
  7. python老王卖西瓜_使用Python爬取京东商品晒单图
  8. 发现 postman 自动生成接口调用代码的一个问题
  9. 58-混沌感悟.(2015.2.11)
  10. oracle oms可以调用吗,oracle oms
  11. 榛子云短信-微信小程序60秒倒计时插件
  12. (原创)c#学习笔记03--变量和表达式03--变量01--简单类型
  13. JavaScript 函数看代码写结果
  14. 190615每日一句;每个学生都不能错过的9个人生忠告; 什么样心态的人,才能取得最终的成功
  15. 「数据新星」Databricks 崛起启示录
  16. linux redis导入数据,redis数据批量导入导出
  17. 无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装
  18. rdt不同版本(rdt1.0,rdt2.0,rdt2.1,rdt2.2,rdt3.0)协议的特点以及发送端接收端的FSM
  19. PHP 5.6 结束安全支持;万豪称 500 余万护照数据被窃
  20. Andwobble破解

热门文章

  1. ARM平台安装oracle时出现错误:runinstaller: line 97 /db/database/install/.oui: cannot execute binary file
  2. Debian 配置RTL8723BU连接wifi网络
  3. 3.2 Execution Model
  4. python绘制引力波
  5. 【NLP】Python NLTK结合Stanford NLP工具包进行分词、词性标注、句法分析
  6. C++函数UpdateData()有什么作用?
  7. 周浩正:写给编辑人的信:繁盛的秘诀之二
  8. Java动态数组的用法详解
  9. 华盛顿大学西雅图分校计算机专业排名,2020年华盛顿大学西雅图分校世界排名...
  10. 计算机用户分配盘符,盘符划分不求人 Win7硬盘分区多面看