久久―日本道色综合久久,亚洲欧美精品在线,狼狼色丁香久久婷婷综合五月,香蕉人人超,日本网站黄,国产在线观看不卡免费高清,无遮挡的毛片免费

2023信創(chuàng)獨(dú)角獸企業(yè)100強(qiáng)
全世界各行各業(yè)聯(lián)合起來,internet一定要實(shí)現(xiàn)!

在Delphi中使用DirectX

2004-02-14 eNet&Ciweek

  Delphi作為一種方便的可視化程序設(shè)計(jì)語言,一 直非常受大家喜愛。但它在圖形處理、3D表現(xiàn)等方面 不很讓人滿意。如果說你要開發(fā)一個(gè)Windows95下的 3D游戲,你會(huì)用什么工具呢?DirectX!不少人會(huì)不加 思索地答道。然而接觸過DirectX的朋友們都知道它 內(nèi)部的結(jié)構(gòu)復(fù)雜,一般來說結(jié)合VC開發(fā)是一個(gè)理想 的組合。而要在Delphi中利用DirectX SDK真是難上 加難。但現(xiàn)在一切都好啦,有了本文介紹的DelphiX 組件,你終于可以用你熟悉的Delphi來開發(fā)漂亮的圖 形程序了。

  DelphiX是由日本人Hiroyuki Hori開發(fā)的使Di rectX5.0在Delphi中更容易使用的一套控件,從網(wǎng)上 時(shí)叫DelphiX.zip,837KB。解開后在bin目錄下 運(yùn)行install_for?(根據(jù)你的Delphi版本號(hào),支持3.0和 4.0),DelphiX會(huì)自動(dòng)將控件安裝到你的Delphi中,幫 助文件也自動(dòng)融合到Delphi的幫助里,真是好用極 了!

  DelphiX包括的控件有如下這些:

  TDXDraw 最重要的控件,是DirectDraw和Direct3D的基礎(chǔ);

  TDXDIB 一個(gè)代表DIB圖像的控件;

  TDXImageList 代表一組 Tpicture;

  TDX3D Direct3D控件,要與TDXDraw共同使用;

  TDXSound DirectSound控件;

  TDXWave 一個(gè)代表波形Wave的控件;

  TDXWaveList 一組Wave;

  TDXInput 輸入控制控件(操縱鍵盤和搖桿要靠它);

  TDXPlay 通訊控件;

  TDXSpriteEngine “精靈”引擎;

  TDXTimer 高速時(shí)間控件;

  TDXPaintbox TDXForm 專為DelphiX優(yōu)化過的Form?! ?

  DirectDraw中重要的對(duì)象有:  

  TDirectDraw對(duì)象

  DirectDraw應(yīng)用程序的核心,它是你創(chuàng)建的第一個(gè)對(duì)象。創(chuàng)建了DirectDraw對(duì) 象后,可以在它的基礎(chǔ)上創(chuàng)建其它所有相關(guān)的對(duì)象。 在DelphiX中的TDXdraw.ddraw屬性即是一個(gè)Tdi rectDraw對(duì)象。

  TDirectDrawSurface對(duì)象

  表征了一塊內(nèi)存區(qū) 域,在該區(qū)域的數(shù)據(jù)將作為圖像顯示在屏幕上或移動(dòng) 到其它表面上?!?

  TDirectDrawPalette對(duì)象

  表征了一個(gè)用于表面 的16色或256色的索引調(diào)色板,它包含了一系列描述 同表面相關(guān)的RGB顏色索引值?!?

  TDirectDrawClipper對(duì)象

  幫助你禁止向表面的 某一位置或超出表面的位置塊寫數(shù)據(jù)?! ?

  Tsprite對(duì)象

  代表了“精靈”,在許多視頻游戲都 使用了精靈。從最基本的意義上來講,一個(gè)精靈就是 在屏幕上移動(dòng)的圖像。精靈畫在一個(gè)表面上,覆蓋在 已有的背景上,合成后的圖像被送到屏幕上顯示出 來,在DelphiX中通過TspriteEngine實(shí)現(xiàn)對(duì)Tsprite的 控制?!?

  TDirectDrawSurfaceCanvas對(duì)象

  提供方便的 訪問機(jī)制,你可以像訪問一般Canvas對(duì)象一樣訪問 它。TDXDraw.Surface.Canvas即是這樣一個(gè)對(duì)象?! ?

  TdirectDrawDisplay對(duì)象

  控制著DirectDraw的 顯示模式,TdxDraw.display是這樣一個(gè)對(duì)象。

  DelphiX基本上嚴(yán)格按照Microsoft DirectX SDK 開發(fā)包來將其功能在Delphi中實(shí)現(xiàn)出來。所以,如果 你對(duì)DirectX SDK比較熟悉的話,你會(huì)發(fā)現(xiàn)大多數(shù)程序從C移植到Delphi是很容易的事。DelphiX中沒有 提供幫助的地方,你可以在DirectX SDK中獲得答案?! ?

  下面通過一個(gè)簡單的例子對(duì)如何利用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);

   {創(chuàng)建抽象圖像表面}

  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;{在繪制之前檢驗(yàn)是否允許}

   DXDraw1.Surfaca.Fill(0);

   x: = x + 1;

   y: = y + 1;

   DXDraw1.Surface.Draw(X, Y, Fsurface.ClientRect,Fsur face, True);

   DXDraw1.Flip; {將內(nèi)存中的表面再將映射入實(shí)際顯存}

  end;

  procedure TForm1.FormActivate(Sender:Tobject);

  begin

   X: =0;

   y: =0;

  end;

  end.

   首先要在程序開頭包含DXClass、DXDraws兩個(gè) Unit(TDXtimer、TDXForm在DXClass中定義,TDX Draw在DXDraws中定義)。程序用的Form不要從一 般的Tform派生,而應(yīng)從TDXForm中派生。在Form 中放入TDXDraw控件和TDXTimer控件,將其inter val值設(shè)為0。對(duì)DXDraw1控件改變其屬性,使其與 Form大小一致。再放人一個(gè)TDXDIB控件,在其屬性 中的DIB一項(xiàng)調(diào)人一個(gè)位圖,如Windows下的bub bles.bmp。定義一個(gè)DirectDraw表面Fsurface,這是一 個(gè)抽象內(nèi)存表面,以后會(huì)將它映射到DXDraw對(duì)象的 Surface上。在DXDraw的Events一欄中編寫OnIni tialize、OnFinalize、OnRestoreSurface三個(gè)過程,之后便 可以根據(jù)需要對(duì)表面進(jìn)行操縱。

   另外,要完成上面程序的功能,還有其他不少辦 法。例如利用TDXImageList對(duì)象,可以用它的方法 Imagelist.items[N].draw來完成同樣功能。

   總之,DirectX博大精深,希望本文能為大家掀開 冰山的一角。

相關(guān)頻道: eNews

您對(duì)本文或本站有任何意見,請?jiān)谙路教峤?,謝謝!

投稿信箱:tougao@enet16.com