⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 012.htm

📁 Delphi书籍--Delphi网上教程
💻 HTM
字号:
<HTML><HEAD><meta http-equiv="Content-Type" content="text/html; charset=GB2312"><TITLE>-->DELPHI专题--多媒体类-->在Delphi中使用DirectX</TITLE>
<META NAME="keywords" CONTENT=" DELPHI专题--多媒体类 在Delphi中使用DirectX">
<META NAME="description" CONTENT=" - DELPHI专题--多媒体类 - 在Delphi中使用DirectX">

<style>
<!--
#page {position:absolute; z-index:0; left:0px; top:0px}
.tt3 {font: 9pt/12pt "宋体"}
.tt2 {font: 12pt/15pt "宋体"}
a {text-decoration:none}
a:hover {color: blue;text-decoration:underline}
-->
</style>
</HEAD>
<a href="index.html">返回</a>

<body text="#000000" aLink=#9900ff link=#006699 vLink=#006699 bgcolor="#FFFFFF" leftmargin="3" topmargin="3" marginheight="3" marginwidth="3">
<TABLE WIDTH="100%" CELLPADDING=10 CELLSPACING=0 BORDER=0>
<TR>

<TD class="tt2" bgcolor="#F5F8F8" width="84%"><center><B><FONT style="FONT-SIZE: 16.5pt" COLOR="#FF6666" FACE="楷体_GB2312">在Delphi中使用DirectX</FONT></B></center>
<hr color="#EE9B73" size="1" width="94%">
<p><span style="font-size: 9pt">Delphi作为一种方便的可视化程序设计语言,一 
直非常受大家喜爱。但它在图形处理、3D表现等方面 
不很让人满意。如果说你要开发一个Windows95下的 3D游戏,你会用什么工具呢?DirectX!不少人会不加 
思索地答道。然而接触过DirectX的朋友们都知道它 
内部的结构复杂,一般来说结合VC开发是一个理想 的组合。而要在Delphi中利用DirectX 
SDK真是难上 加难。但现在一切都好啦,有了本文介绍的DelphiX 
组件,你终于可以用你熟悉的Delphi来开发漂亮的图 形程序了。 <br> 
&nbsp;&nbsp; DelphiX是由日本人Hiroyuki Hori开发的使Di rectX5.0在Delphi中更容易使用的一套控件,从网上 
下载时叫DelphiX.zip,837KB。解开后在bin目录下 运行install_for?(根据你的Delphi版本号,支持3.0和 
4.0),DelphiX会自动将控件安装到你的Delphi中,帮 
助文件也自动融合到Delphi的帮助里,真是好用极 了!<br> 
<br> 
<strong>DelphiX包括的控件有如下这些</strong>: <br> 
TDXDraw 最重要的控件,是DirectDraw和Direct3D的基础; <br> 
TDXDIB 一个代表DIB图像的控件; <br> 
TDXImageList 代表一组 TPicture; <br> 
TDX3D Direct3D控件,要与TDXDraw共同使用;<br> 
TDXSound DirectSound控件; <br> 
TDXWave 一个代表波形Wave的控件; <br> 
TDXWaveList 一组Wave;<br> 
TDXInput 输入控制控件(操纵键盘和摇杆要靠它); <br> 
TDXPlay 通讯控件; <br> 
TDXSpriteEngine “精灵”引擎; <br> 
TDXTimer 高速时间控件; <br> 
TDXPaintbox TDXForm 专为DelphiX优化过的Form。 <br> 
<strong><br> 
DirectDraw中重要的对象有</strong>: <br> 
<br> 
TDirectDraw对象 <br> 
DirectDraw应用程序的核心,它是你创建的第一个对象。创建了DirectDraw对 
象后,可以在它的基础上创建其它所有相关的对象。 在DelphiX中的TDXdraw.ddraw属性即是一个Tdi 
rectDraw对象。 <br> 
<br> 
TDirectDrawSurface对象 <br> 
表征了一块内存区 
域,在该区域的数据将作为图像显示在屏幕上或移动 
到其它表面上。 <br> 
<br> 
TDirectDrawPalette对象 <br> 
表征了一个用于表面 的16色或256色的索引调色板,它包含了一系列描述 
同表面相关的RGB颜色索引值。 <br> 
<br> 
TDirectDrawClipper对象 <br> 
帮助你禁止向表面的 某一位置或超出表面的位置块写数据。 <br> 
<br> 
TSprite对象 <br> 
代表了“精灵”,在许多视频游戏都 
使用了精灵。从最基本的意义上来讲,一个精灵就是 
在屏幕上移动的图像。精灵画在一个表面上,覆盖在 
已有的背景上,合成后的图像被送到屏幕上显示出 来,在DelphiX中通过TspriteEngine实现对Tsprite的 
控制。 <br> 
<br> 
TDirectDrawSurfaceCanvas对象 <br> 
提供方便的 访问机制,你可以像访问一般Canvas对象一样访问 它。TDXDraw.Surface.Canvas即是这样一个对象。 
<br> 
<br> 
TdirectDrawDisplay对象 <br> 
控制着DirectDraw的 显示模式,TdxDraw.display是这样一个对象。 <br> 
DelphiX基本上严格按照Microsoft DirectX SDK 开发包来将其功能在Delphi中实现出来。所以,如果 
你对DirectX SDK比较熟悉的话,你会发现大多数程 序从C移植到Delphi是很容易的事。DelphiX中没有 
提供帮助的地方,你可以在DirectX SDK中获得答 案。 <br> 
<br> 
&nbsp;&nbsp; 下面通过一个简单的例子对如何利用DelphiX编 
程作一介绍,只涉及Ddraw二维的一小部分。 <br> 
unit Unit1; <br> 
interface <br> 
uses <br> 
&nbsp; Windows.Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, <br> 
&nbsp; DXClass, DXDraws, DIB; <br> 
type <br> 
&nbsp; TForm1=class(TDXForm) <br> 
&nbsp; DXDraw1:TDXDraw; <br> 
&nbsp; DXTimer1:TDXTimer; <br> 
&nbsp; DXDIB1:TDXDIB; <br> 
&nbsp; procedure DXDrawlFinalize(Sender:TObject); <br> 
&nbsp; procedure DXDraw1Initialize(Sender:TObject); <br> 
&nbsp; procedure DXDraw1RestoreSurfase(Sender:TObject); <br> 
&nbsp; procedure DXTimer1Timer(Sendsr:TObject;LagCount:Integer); <br> 
&nbsp; procedure FormActivate(Sender:TObject); <br> 
private <br> 
&nbsp; {Private declarations} <br> 
public <br> 
&nbsp; {Public declarations} <br> 
private <br> 
&nbsp; Fsurface:TDirectDrawSurface; <br> 
&nbsp; end; <br> 
var <br> 
&nbsp; Form1:TForm1; <br> 
&nbsp; x,y:integer; <br> 
implementation <br> 
{$R *.DFM} <br> 
procedure TForm1.DXDrawlInitialize(Sender:TObject); <br> 
begin <br> 
&nbsp; FSurface:=TDirectDrawSurface.Create(DXDraw1.DDraw); <br> 
&nbsp; {创建抽象图像表面} <br> 
end; <br> 
procedure TForm1.DXDraw1Finalize(Sender:TObject); <br> 
begin <br> 
&nbsp; FSurface.Free; FSurface: = nil; <br> 
&nbsp; {释放表面} <br> 
end; <br> 
procedure TForm1.DXDraw1RestoreSurfare(Sender:TObject); <br> 
begin <br> 
&nbsp; FSurface.LoadfromGraphic(DXDIB1.DIB);{将位图送入抽象表面} <br> 
end; <br> 
procedure TForm1.DXTimer1Timer(Sendsr.TObject;LagCount integer); <br> 
begin <br> 
&nbsp; if not DXDraw1.CanDraw then Exit;{在绘制之前检验是否允许} <br> 
&nbsp; DXDraw1.Surfaca.Fill(0); <br> 
&nbsp; x: = x + 1; <br> 
&nbsp; y: = y + 1; <br> 
&nbsp; DXDraw1.Surface.Draw(X, Y, FSurface.ClientRect,FSur face, True); <br> 
&nbsp; DXDraw1.Flip; {将内存中的表面再将映射入实际显存} <br> 
end; <br> 
procedure TForm1.FormActivate(Sender:TObject); <br> 
begin <br> 
&nbsp; X: =0; <br> 
&nbsp; y: =0; <br> 
end; <br> 
end. <br> 
&nbsp;&nbsp; 首先要在程序开头包含DXClass、DXDraws两个 Unit(TDXtimer、TDXForm在DXClass中定义,TDX 
Draw在DXDraws中定义)。程序用的Form不要从一 般的TForm派生,而应从TDXForm中派生。在Form 
中放入TDXDraw控件和TDXTimer控件,将其inter val值设为0。对DXDraw1控件改变其属性,使其与 
Form大小一致。再放人一个TDXDIB控件,在其属性 中的DIB一项调人一个位图,如Windows下的bub 
bles.bmp。定义一个DirectDraw表面Fsurface,这是一 
个抽象内存表面,以后会将它映射到DXDraw对象的 Surface上。在DXDraw的Events一栏中编写OnIni 
tialize、OnFinalize、OnRestoreSurface三个过程,之后便 
可以根据需要对表面进行操纵。 <br> 
&nbsp;&nbsp; 另外,要完成上面程序的功能,还有其他不少办 
法。例如利用TDXImageList对象,可以用它的方法 Imagelist.items[N].draw来完成同样功能。 
&nbsp;&nbsp; </span></p> 
<BR> 
<hr color="#EE9B73" size="1" width="94%"> 
 
</TD> 
 
</TR> 
</table> 
</BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -