📄 012.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>
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>
下面通过一个简单的例子对如何利用DelphiX编
程作一介绍,只涉及Ddraw二维的一小部分。 <br>
unit Unit1; <br>
interface <br>
uses <br>
Windows.Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, <br>
DXClass, DXDraws, DIB; <br>
type <br>
TForm1=class(TDXForm) <br>
DXDraw1:TDXDraw; <br>
DXTimer1:TDXTimer; <br>
DXDIB1:TDXDIB; <br>
procedure DXDrawlFinalize(Sender:TObject); <br>
procedure DXDraw1Initialize(Sender:TObject); <br>
procedure DXDraw1RestoreSurfase(Sender:TObject); <br>
procedure DXTimer1Timer(Sendsr:TObject;LagCount:Integer); <br>
procedure FormActivate(Sender:TObject); <br>
private <br>
{Private declarations} <br>
public <br>
{Public declarations} <br>
private <br>
Fsurface:TDirectDrawSurface; <br>
end; <br>
var <br>
Form1:TForm1; <br>
x,y:integer; <br>
implementation <br>
{$R *.DFM} <br>
procedure TForm1.DXDrawlInitialize(Sender:TObject); <br>
begin <br>
FSurface:=TDirectDrawSurface.Create(DXDraw1.DDraw); <br>
{创建抽象图像表面} <br>
end; <br>
procedure TForm1.DXDraw1Finalize(Sender:TObject); <br>
begin <br>
FSurface.Free; FSurface: = nil; <br>
{释放表面} <br>
end; <br>
procedure TForm1.DXDraw1RestoreSurfare(Sender:TObject); <br>
begin <br>
FSurface.LoadfromGraphic(DXDIB1.DIB);{将位图送入抽象表面} <br>
end; <br>
procedure TForm1.DXTimer1Timer(Sendsr.TObject;LagCount integer); <br>
begin <br>
if not DXDraw1.CanDraw then Exit;{在绘制之前检验是否允许} <br>
DXDraw1.Surfaca.Fill(0); <br>
x: = x + 1; <br>
y: = y + 1; <br>
DXDraw1.Surface.Draw(X, Y, FSurface.ClientRect,FSur face, True); <br>
DXDraw1.Flip; {将内存中的表面再将映射入实际显存} <br>
end; <br>
procedure TForm1.FormActivate(Sender:TObject); <br>
begin <br>
X: =0; <br>
y: =0; <br>
end; <br>
end. <br>
首先要在程序开头包含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>
另外,要完成上面程序的功能,还有其他不少办
法。例如利用TDXImageList对象,可以用它的方法 Imagelist.items[N].draw来完成同样功能。
</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 + -