Y
YB_unique
Unregistered / Unconfirmed
GUEST, unregistred user!
说来好笑,一旦要谈心得了,又好像一时千言万语不知从何说起,想来想去还是照Mr曹的意见吧!先对比一下DirectX
和DelphiX的异同。有人说DirectX更核心,此言不错,不过不要忘了DelphiX作为封装好的控件有其易用性和方便性,大家
可以以此更好更快的练手入门啊!曾在韩国、德国、俄罗斯的网站都见过关于DelphiX的使用介绍,所以说技术无国界!
(盲目自大锁国是没有意义的,我们应该理智的看待这个世界,强国应该有鲁迅先生提倡的“拿来主义”精神,取长补短,
所谓“师夷长技以制夷”正是此意,此为治国上上之策,呵呵!打住,有些扯远了。Let's Go !)
大家通过前面的热身都知道了标准的DirectX应该由以下几个部分组成:
DirectDraw、DirectInput、DirectPlay、DirectSound、DirectSound3D、DirectMusic、Direct3D。作用在前文都有所介绍。
接下来我们熟悉一下DelphiX控件,大家可以对照安装好的面板来看。
DelphiX作为一套Delphi下开发DirectX程序的控件,它又提供了哪些给我们调用呢?这是大家最关心的话题,以下就是
它所提供的所有单元(8个):
DIB、DXClass、DXDraws、DXInput、DXPlay、DXSounds、DXSprite、Wave。
以下为它们的功能之简要说明:
DIB包括TDXDIB和TDXPaintBox两个部分,TDXDIB是提供DIB图象控制,TDXPaintBox是专门优化后的Paintbox。像调色板、象
素、颜色等等就都由它解决。
DXClass包括了TDXForm和TDXTimer两个部分,TDXForm专为DelphiX优化过的Form,TDXTimer则是一套高速时间控件。它常常
被用来作为时间处理、判断开始结束、处理Form上的点位置等等。
DXDraws也许是大家最感兴趣的部分,包括TDX3D、TDXDraw和TDXImageList三个部分。TDX3D为Direct3D高级调用功能控件,
不能单独使用。TDXDraw提供DirectDraw和Direct3D的基础功能。TDXImageList提供一组图象列表支持,也不得单独使用。
以上三者中TDXDraw为基础,也是最重要的部分。
DXInput仅包含TDXInput一个控件,提供输入控制功能,如键盘,摇杆、手柄的操作等等。
DXPlay仅包含TDXPlay一个通讯控件,想支持多人玩离不开它喔!
DXSounds包含TDXSound和TDXWaveList(不要把它想当然以为是Wave单元中的)两个部分,TDXSound是一个DirectSound控件,
TDXWaveList提供WAV列表且不能单独使用。不用多说,声音就全靠它了!
DXSprite只有一个TDXSpriteEngine即“精灵”引擎,如果纯粹是DirectDraw做特效图象处理就没必要用了,做高级游戏肯
定少不了。精灵的移动、创建等等一切控制都在它的掌握中。
Wave仅包含TDXWave,一个波形Wave的控件。提供流的形式处理WAV。
上面初初的介绍了一下DelphiX控件的全部组成部分。希望对大家掌握一个整体概念有所帮助!
下面我们从一个简单例子入手先来初尝DelphiX的味道!主要是进一步增强大家的感性认识。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, DXClass, ExtCtrls, DXDraws,
StdCtrls, DIB;
type
TForm1 = class(TDXForm) //和往常大家熟悉的TForm1 = class(TForm)不同了喔!
DXDraw1: TDXDraw;
DXDIB1: TDXDIB;
procedure DXDraw1RestoreSurface(Sender: TObject);
procedure DXDraw1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure DXDraw1InitializeSurface(Sender: TObject);
procedure DXDraw1FinalizeSurface(Sender: TObject);
private
FSurface: TDirectDrawSurface; //表示一块内存区域,用来储存图象数据
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.DXDraw1InitializeSurface(Sender: TObject);
begin
FSurface := TDirectDrawSurface.Create(DXDraw1.DDraw); //创建图像表面
end;
procedure TForm1.DXDraw1FinalizeSurface(Sender: TObject);
begin
FSurface.Free; FSurface := nil; //释放图象表面
end;
procedure TForm1.DXDraw1RestoreSurface(Sender: TObject);
begin
FSurface.LoadFromGraphic(DXDIB1.DIB); //将位图载入创建好的表面
end;
procedure TForm1.DXDraw1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if not DXDraw1.CanDraw then Exit; //在画图之前检验是否允许
DXDraw1.Surface.Draw(X-FSurface.Width div 2, Y-FSurface.Height div 2,
FSurface.ClientRect, FSurface, True); //图象数据存入内存
DXDraw1.Flip; //将内存中的表面映射到显存即屏幕显示
end;
end.
很多朋友一定会大呼过瘾吧!^_^ 但上面的代码毛病不少,看起来不是那么完美喔?最起码鼠标一动留下的残影明显
不会消失,怎么办?
呵呵!试试在if not DXDraw1.CanDraw then Exit; 一句下面加上
DXDraw1.Surface.Fill(0);
发现了什么?你一定会说“为什么会这样呢?”聪明的你一定猜得到!
呵呵!这个例子很简单,不过从下次开始我们将对每个控件一一结合实例剖析!
哇哇!打字真的好累啊!I want to sleep !^_^
和DelphiX的异同。有人说DirectX更核心,此言不错,不过不要忘了DelphiX作为封装好的控件有其易用性和方便性,大家
可以以此更好更快的练手入门啊!曾在韩国、德国、俄罗斯的网站都见过关于DelphiX的使用介绍,所以说技术无国界!
(盲目自大锁国是没有意义的,我们应该理智的看待这个世界,强国应该有鲁迅先生提倡的“拿来主义”精神,取长补短,
所谓“师夷长技以制夷”正是此意,此为治国上上之策,呵呵!打住,有些扯远了。Let's Go !)
大家通过前面的热身都知道了标准的DirectX应该由以下几个部分组成:
DirectDraw、DirectInput、DirectPlay、DirectSound、DirectSound3D、DirectMusic、Direct3D。作用在前文都有所介绍。
接下来我们熟悉一下DelphiX控件,大家可以对照安装好的面板来看。
DelphiX作为一套Delphi下开发DirectX程序的控件,它又提供了哪些给我们调用呢?这是大家最关心的话题,以下就是
它所提供的所有单元(8个):
DIB、DXClass、DXDraws、DXInput、DXPlay、DXSounds、DXSprite、Wave。
以下为它们的功能之简要说明:
DIB包括TDXDIB和TDXPaintBox两个部分,TDXDIB是提供DIB图象控制,TDXPaintBox是专门优化后的Paintbox。像调色板、象
素、颜色等等就都由它解决。
DXClass包括了TDXForm和TDXTimer两个部分,TDXForm专为DelphiX优化过的Form,TDXTimer则是一套高速时间控件。它常常
被用来作为时间处理、判断开始结束、处理Form上的点位置等等。
DXDraws也许是大家最感兴趣的部分,包括TDX3D、TDXDraw和TDXImageList三个部分。TDX3D为Direct3D高级调用功能控件,
不能单独使用。TDXDraw提供DirectDraw和Direct3D的基础功能。TDXImageList提供一组图象列表支持,也不得单独使用。
以上三者中TDXDraw为基础,也是最重要的部分。
DXInput仅包含TDXInput一个控件,提供输入控制功能,如键盘,摇杆、手柄的操作等等。
DXPlay仅包含TDXPlay一个通讯控件,想支持多人玩离不开它喔!
DXSounds包含TDXSound和TDXWaveList(不要把它想当然以为是Wave单元中的)两个部分,TDXSound是一个DirectSound控件,
TDXWaveList提供WAV列表且不能单独使用。不用多说,声音就全靠它了!
DXSprite只有一个TDXSpriteEngine即“精灵”引擎,如果纯粹是DirectDraw做特效图象处理就没必要用了,做高级游戏肯
定少不了。精灵的移动、创建等等一切控制都在它的掌握中。
Wave仅包含TDXWave,一个波形Wave的控件。提供流的形式处理WAV。
上面初初的介绍了一下DelphiX控件的全部组成部分。希望对大家掌握一个整体概念有所帮助!
下面我们从一个简单例子入手先来初尝DelphiX的味道!主要是进一步增强大家的感性认识。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, DXClass, ExtCtrls, DXDraws,
StdCtrls, DIB;
type
TForm1 = class(TDXForm) //和往常大家熟悉的TForm1 = class(TForm)不同了喔!
DXDraw1: TDXDraw;
DXDIB1: TDXDIB;
procedure DXDraw1RestoreSurface(Sender: TObject);
procedure DXDraw1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure DXDraw1InitializeSurface(Sender: TObject);
procedure DXDraw1FinalizeSurface(Sender: TObject);
private
FSurface: TDirectDrawSurface; //表示一块内存区域,用来储存图象数据
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.DXDraw1InitializeSurface(Sender: TObject);
begin
FSurface := TDirectDrawSurface.Create(DXDraw1.DDraw); //创建图像表面
end;
procedure TForm1.DXDraw1FinalizeSurface(Sender: TObject);
begin
FSurface.Free; FSurface := nil; //释放图象表面
end;
procedure TForm1.DXDraw1RestoreSurface(Sender: TObject);
begin
FSurface.LoadFromGraphic(DXDIB1.DIB); //将位图载入创建好的表面
end;
procedure TForm1.DXDraw1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if not DXDraw1.CanDraw then Exit; //在画图之前检验是否允许
DXDraw1.Surface.Draw(X-FSurface.Width div 2, Y-FSurface.Height div 2,
FSurface.ClientRect, FSurface, True); //图象数据存入内存
DXDraw1.Flip; //将内存中的表面映射到显存即屏幕显示
end;
end.
很多朋友一定会大呼过瘾吧!^_^ 但上面的代码毛病不少,看起来不是那么完美喔?最起码鼠标一动留下的残影明显
不会消失,怎么办?
呵呵!试试在if not DXDraw1.CanDraw then Exit; 一句下面加上
DXDraw1.Surface.Fill(0);
发现了什么?你一定会说“为什么会这样呢?”聪明的你一定猜得到!
呵呵!这个例子很简单,不过从下次开始我们将对每个控件一一结合实例剖析!
哇哇!打字真的好累啊!I want to sleep !^_^