DelphiX 组件
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 组件相关推荐
- DelphiX教程系列 1 - 使用键盘和摇杆
用到的组件(TDXInput.TTimer): 原文链接:http://www.delphigamedev.com/tutorials/dxtut1.htm 在这一教程里,我们将会学习如何使用键盘来移 ...
- 用Delphi + DirectX开发简单RPG游戏
http://www.bianceng.cn/delphi/dp16.htm 提到 RPG (角色扮演游戏,Role Play Game),在座各位恐怕没有不熟悉的.从古老经典的 DOS 版<仙 ...
- 用Delphi+DirectX开发简单RPG游戏
提到 rpg (角色扮演游戏,role play game),在座各位恐怕没有不熟悉的.从古老经典的 dos 版<仙剑奇侠传>到新潮花哨的<轩辕剑>系列,无不以曲折优美的故事情 ...
- 《Delphi传奇》网络游戏组件安装步骤:Delphi 10.3安装DelphiX
1.官网下载最新版本DelphiX游戏开发组件:http://www.micrel.cz/Dx/ 欢迎加入Delphi开发局QQ群:32422310 2.解压缩到一个文件夹中,建议不要用英文: 3.启 ...
- DelphiX教程系列 4 - 滚动背景 part 1
用到的组件: (TDXDraw, TDXImageList, TDXSpriteEngine, TDXTimer, TDXInput) 原文链接:http://www.delphigamedev.co ...
- DelphiX教程系列 3 - 动画 part 1
用到的组件(TDXDraw,TDXImageList,TDXSpriteEngine): 原文链接:http://www.delphigamedev.com/tutorials/dxtut3.htm ...
- Delphi 与 DirectX 之 DelphiX(25): TDIB.Blur();
DelphiX 的组件面板上, 第二个就是 TDXDIB; TDXDIB.DIB 是 TDXDIB 的唯一属性(其他是 TComponent 固有的); TDXDIB.DIB 属性是一个 TDIB 对 ...
- 第四天:Vue组件的slot以及webpack
插槽 认识slot 在生活中,很多地方都有插槽,电脑的USB插槽,插板中的电源插槽等. 插槽的目的是让我们原来的设备具备更多的扩展性.比如电脑的USB我们可以插入U盘.鼠标.键盘.硬盘.手机.音响等等 ...
- 第三天:Vue的组件化
1.认识组件化 我们将一个完整的页面分成很多个组件,每个组件都用于实现页面的一个功能块,而每一个组件又可以进行细分. 组件化是Vuejs中的重要思想,它提供了一种抽象,让我们可以开发出一个个独立可复用 ...
最新文章
- eclipse中如何将java项目转为java Web项目
- 什么事情是你当了老板才知道的?
- ACdream 1083 有向无环图dp
- 【 Verilog HDL 】不同抽象级别的Verilog HDL模型之门级结构描述
- visio 模板_盒图模板一键套用,便捷绘制精美盒图图表
- 机器学习该如何应用到量化投资系列(二)
- python老王卖西瓜_使用Python爬取京东商品晒单图
- 发现 postman 自动生成接口调用代码的一个问题
- 58-混沌感悟.(2015.2.11)
- oracle oms可以调用吗,oracle oms
- 榛子云短信-微信小程序60秒倒计时插件
- (原创)c#学习笔记03--变量和表达式03--变量01--简单类型
- JavaScript 函数看代码写结果
- 190615每日一句;每个学生都不能错过的9个人生忠告; 什么样心态的人,才能取得最终的成功
- 「数据新星」Databricks 崛起启示录
- linux redis导入数据,redis数据批量导入导出
- 无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装
- rdt不同版本(rdt1.0,rdt2.0,rdt2.1,rdt2.2,rdt3.0)协议的特点以及发送端接收端的FSM
- PHP 5.6 结束安全支持;万豪称 500 余万护照数据被窃
- Andwobble破解
热门文章
- ARM平台安装oracle时出现错误:runinstaller: line 97 /db/database/install/.oui: cannot execute binary file
- Debian 配置RTL8723BU连接wifi网络
- 3.2 Execution Model
- python绘制引力波
- 【NLP】Python NLTK结合Stanford NLP工具包进行分词、词性标注、句法分析
- C++函数UpdateData()有什么作用?
- 周浩正:写给编辑人的信:繁盛的秘诀之二
- Java动态数组的用法详解
- 华盛顿大学西雅图分校计算机专业排名,2020年华盛顿大学西雅图分校世界排名...
- 计算机用户分配盘符,盘符划分不求人 Win7硬盘分区多面看