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

2025年度未來銀行科技服務商TOP100
全世界各行各業(yè)聯(lián)合起來,internet一定要實現(xiàn)!

在Delphi中使用DirectX

2004-02-14 eNet&Ciweek

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

  DelphiX是由日本人Hiroyuki Hori開發(fā)的使Di rectX5.0在Delphi中更容易使用的一套控件,從網(wǎng)上 時叫DelphiX.zip,837KB。解開后在bin目錄下 運行install_for?(根據(jù)你的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優(yōu)化過的Form?! ?

  DirectDraw中重要的對象有:  

  TDirectDraw對象

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

  TDirectDrawSurface對象

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

  TDirectDrawPalette對象

  表征了一個用于表面 的16色或256色的索引調色板,它包含了一系列描述 同表面相關的RGB顏色索引值?!?

  TDirectDrawClipper對象

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

  Tsprite對象

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

  TDirectDrawSurfaceCanvas對象

  提供方便的 訪問機制,你可以像訪問一般Canvas對象一樣訪問 它。TDXDraw.Surface.Canvas即是這樣一個對象?! ?

  TdirectDrawDisplay對象

  控制著DirectDraw的 顯示模式,TdxDraw.display是這樣一個對象。

  DelphiX基本上嚴格按照Microsoft DirectX SDK 開發(fā)包來將其功能在Delphi中實現(xiàn)出來。所以,如果 你對DirectX SDK比較熟悉的話,你會發(fā)現(xiàn)大多數(shù)程序從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);

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

   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下的bub bles.bmp。定義一個DirectDraw表面Fsurface,這是一 個抽象內存表面,以后會將它映射到DXDraw對象的 Surface上。在DXDraw的Events一欄中編寫OnIni tialize、OnFinalize、OnRestoreSurface三個過程,之后便 可以根據(jù)需要對表面進行操縱。

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

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

相關頻道: eNews

您對本文或本站有任何意見,請在下方提交,謝謝!

投稿信箱:tougao@enet16.com