標籤: 暫無標籤

DirectxDirectX並不是一個單純的圖形API,它是由微軟公司開發的用途廣泛的API,它包含有Direct Graphics(Direct 3D+Direct Draw)、Direct Input、Direct Play、Direct Sound、Direct Show、Direct Setup、Direct Media Objects等多個組件,它提供了一整套的多媒體介面方案。只是其在3D圖形方面的優秀表現,讓它的其它方面顯得暗淡無光。DirectX開發之初是為了彌補Windows 3.1系統對圖形、聲音處理能力的不足,而今已發展成為對整個多媒體系統的各個方面都有決定性影響的介面。

1 Directx -概述

DirectxDirectx

它可讓以windows為平台的遊戲或多媒體程序獲得更高的執行效率,加強3d圖形和聲音效果,並提供設計人員一個共同的硬體驅動標準,讓遊戲開發者不必為每一品牌的硬體來寫不同的驅動程序,也降低用戶安裝及設置硬體的複雜度。這樣說是不是有點不太明白,其實從字面意義上說,Direct就是直接的意思,而後邊的X則代表了很多的意思,從這一點上我們就可以看出DirectX的出現就是為了為眾多軟體提供直接服務的。

舉個例子吧,骨灰級玩家(玩遊戲比較長的)以前在DOS下玩遊戲時,可不像我們現在,安裝上就可以玩了,他們往往首先要先設置音效卡的品牌和型號,然後還要設置IRQ(中斷)、I/O(輸入於輸出)、DMA(存取模式),如果哪項設置的不對,那麼遊戲聲音就發不出來。這部分的設置不僅讓玩家傷透腦筋,而且對遊戲開發者來說就更頭痛了,因為為了讓遊戲能夠在眾多電腦中正確運行,開發者必須在遊戲製作之初,便需要把市面上所有音效卡硬體數據都收集過來,然後根據不同的 API(應用編程介面)來寫不同的驅動程序,這對於遊戲製作公司來說,是很難完成的,所以說在當時多媒體遊戲很少。微軟正是看到了這個問題,為眾廠家推出了一個共同的應用程序介面——DirectX,只要這個遊戲是依照Directx來開發的,不管你是什麼顯卡、音效卡、統統都能玩,而且還能發揮更佳的效果。當然,前提是你的顯卡、音效卡的驅動程序也必須支持DirectX才行。

2 Directx -組成

DirectX是由很多API組成的,按照性質分類,可以分為四大部分,顯示部分、聲音部分、輸入部分和網路部分。

顯示部分擔任圖形處理的關鍵,分為DirectDraw(DDraw)和Direct3D(D3D),前者主要負責2D圖像加速。它包括很多方面:我們播放mpg、DVD電影、看圖、玩小遊戲等等都是用的DDraw,你可以把它理解成所有劃線的部分都是用的DDraw。後者則主要負責3D效果的顯示,比如CS中的場景和人物、FIFA中的人物等等,都是使用了DirectX的Direct3D。

聲音部分中最主要的API是DirectSound,除了播放聲音和處理混音之外,還加強了3d音效,並提供了錄音功能。我們前面所舉的音效卡兼容的例子,就是利用了DirectSound來解決的。

輸入部分DirectInput可以支持很多的遊戲輸入設備,它能夠讓這些設備充分發揮最佳狀態和全部功能。除了鍵盤和滑鼠之外還可以連接手柄、搖桿、模擬器等。

網路部分DirectPlay主要就是為了具有網路功能遊戲而開發的,提供了多種連接方式,TPC/IP,IPX,Modem,串口等等,讓玩家可以用各種連網方式來進行對戰,此外也提供網路對話功能及保密措施。

3 Directx -發展歷程

在DirectX誕生之初,業界已經有眾多標準,其中有兩個重要的標準:OpenGL和Glide,特別是前者,它被用於圖形、影像伺服器,製作電影、科教片等等,隨著技術逐漸成熟,越來越普及,如當時大名鼎鼎的Quake 3遊戲就是基於這個標準的。而當時的DirectX,很多硬體、主流遊戲都不支持它,沒有遊戲、沒有硬體,即使再有好的標準也是沒有意義的, DirectX的魅力一直沒有的到表現。但是它有微軟的支持推廣,它就有希望。 那麼DirectX的發展,都經歷了哪些版本呢?

DirectX 1.0

第一代的DirectX很不成功,推出時眾多的硬體均不支持,當時基本都採用專業圖形API-OpenGL,缺乏硬體的支持成了其流行的最大障礙。DirectX 1.0版本是第一個可以直接對硬體信息進行讀取的程序,它提供了更為直接的讀取圖形硬體的性能(比如:顯示卡上的塊移動功能)以及基本的聲音和輸入設備功能(函數),使開發的遊戲能實現對二維(2D)圖像進行加速。這時候的DirectX不包括現在所有的3D功能,還處於一個初級階段。

DirectX 2.0

DirectX 2.0在二維圖形方面做了些改進,增加了一些動態效果,採用了Direct 3D的技術。這樣DirectX 2.0與DirectX 1.0有了相當大的不同。在DirectX 2.0中,採用了「平滑模擬和RGB模擬」兩種模擬方式對三維(3D)圖像進行加速計算的。DirectX 2.0同時也採用了更加友好的用戶設置程序並更正了應用程序介面的許多問題。從DirectX 2.0開始,整個DirectX的設計架構雛形就已基本完成。

DirectX 修復工具 2.1增強版
我們很喜歡硬碟版遊戲,因為它們無需安裝,解壓即玩,可是也正是因為硬碟版缺少了官方版本安裝包的系統組件,多數情況下都會遇到缺少組件的提示,另遊戲無法運行!為此,軟體盒子發布過DLL文件修復軟體來幫助大家自動查找並安裝、修復由DLL、運行庫的缺失所引起的問題;而遊戲中另外一個必不可少的元素就是DirectX,系統錯誤中提示缺少d3dx9_39.dll、d3dx9_40.dll、d3dx9_41.dll、d3dx9_42.dll、d3dx9_43.dll、xinput1_3.dll的頻率高於其它,這些都是因為DirectX沒有安裝或者存在問題引起的,為了讓大家更方便的解決由DirectX引起的問題,「VBcom」特意編寫了「DirectX 修復工具」,它採用了一鍵操作的簡單方式,可以在Windows xp/7(X86&X64)系統中自動完成校驗、檢測、修復、註冊DirectX ,一次性把系統缺失的文件自動安裝,舊的文件自動升級!
DirectX 3.0

DirectX 3.0的推出是在1997年最後一個版本的Windows95發布后不久,此時3D遊戲開始深入人心,DirectX也逐漸得到軟硬體廠商的認可,97年時應用程序介面標準共有三個,分別是專業的OpenGL介面,微軟的DirectX D介面和3dfx公司的Glide介面。而那時的3dfx公司是最為強大的顯卡製造商,它的Glide介面自然也受到最廣泛的應用,但隨著3dfx公司被 NVIDIA的收購、Voodoo顯卡的衰敗,Glide介面逐漸從人們眼中消失了。

DirectX 5.0
   
微軟公司並沒有推出DirectX 4.0,而是直接推出了DirectX 5.0。此版本對Direct3D做出了很大的改動,加入了霧化效果、Alpha混合等3D特效,使3D遊戲中的空間感和真實感得以增強,還加入了S3的紋理壓縮技術。同時,DirectX 5.0在其它各組件方面也有加強,在音效卡、遊戲控制器方面均做了改進,支持了更多的設備。因此,DirectX發展到DirectX 5.0才真正走向了成熟。此時的DirectX性能完全不遜色於其它3D API,而且大有後來居上之勢。

DirectX 6.0
   
DirectX 6.0推出時,其最大的競爭對手之一Glide,已逐步走向了沒落,而DirectX則得到了大多數廠商的認可。DirectX 6.0中加入了雙線性過濾、三線性過濾等優化3D圖像質量的技術,遊戲中的3D技術逐漸走入成熟階段。

DirectX 7.0
   
DirectX 7.0最大的特色就是支持T&L,中文名稱是「坐標轉換和光源」。3D遊戲中的任何一個物體都有一個坐標,當此物體運動時,它的坐標發生變化,這指的就是坐標轉換;3D遊戲中除了場景+物體還需要燈光,沒有燈光就沒有3D物體的表現,無論是實時3D遊戲還是3D影像渲染,加上燈光的3D渲染是最消耗資源的。雖然OpenGL中已有相關技術,但此前從未在民用級硬體中出現。在T&L問世之前,位置轉換和燈光都需要CPU來計算,CPU速度越快,遊戲表現越流暢。使用了T&L功能后,這兩種效果的計算用顯示卡的GPU來計算,這樣就可以把CPU從繁忙的勞動中解脫出來。換句話說,擁有T&L顯示卡,使用DirectX 7.0,即使沒有高速的CPU,同樣能流暢的跑3D遊戲。

DirectX 8.0
   
DirectX 8.0的推出引發了一場顯卡革命,它首次引入了「像素渲染」概念,同時具備像素渲染引擎(Pixel Shader)與頂點渲染引擎(Vertex Shader),反映在特效上就是動態光影效果。同硬體T&L僅僅實現的固定光影轉換相比,VS和PS單元的靈活性更大,它使GPU真正成為了可編程的處理器。這意味著程序員可通過它們實現3D場景構建的難度大大降低。通過VS和PS的渲染,可以很容易的寧造出真實的水面動態波紋光影效果。此時DirectX的權威地位終於建成。

DirectX 9.0
   
2002年底,微軟發布DirectX9.0。DirectX 9中PS單元的渲染精度已達到浮點精度,傳統的硬體T&L單元也被取消。全新的VertexShader(頂點著色引擎)編程將比以前複雜得多,新的VertexShader標準增加了流程式控制制,更多的常量,每個程序的著色指令增加到了1024條。

PS 2.0具備完全可編程的架構,能對紋理效果即時演算、動態紋理貼圖,還不佔用顯存,理論上對材質貼圖的解析度的精度提高無限多;另外PS1.4隻能支持28個硬體指令,同時操作6個材質,而PS2.0卻可以支持160個硬體指令,同時操作16個材質數量,新的高精度浮點數據規格可以使用多重紋理貼圖,可操作的指令數可以任意長,電影級別的顯示效果輕而易舉的實現。

VS 2.0通過增加Vertex程序的靈活性,顯著的提高了老版本(DirectX8)的VS性能,新的控制指令,可以用通用的程序代替以前專用的單獨著色程序,效率提高許多倍;增加循環操作指令,減少工作時間,提高處理效率;擴展著色指令個數,從128個提升到256個。

增加對浮點數據的處理功能,以前只能對整數進行處理,這樣提高渲染精度,使最終處理的色彩格式達到電影級別。突破了以前限制PC圖形圖象質量在數學上的精度障礙,它的每條渲染流水線都升級為128位浮點顏色,讓遊戲程序設計師們更容易更輕鬆的創造出更漂亮的效果,讓程序員編程更容易。

DirectX 9.0c
   
與過去的DirectX 9.0b和Shader Model 2.0相比較,DirectX 9.0c最大的改進,便是引入了對Shader Model 3.0(包括Pixel Shader 3.0 和Vertex Shader 3.0兩個著色語言規範)的全面支持。舉例來說,DirectX 9.0b的Shader Model 2.0所支持的Vertex Shader最大指令數僅為256個,Pixel Shader最大指令數更是只有96個。而在最新的Shader Model 3.0中,Vertex Shader和Pixel Shader的最大指令數都大幅上升至65535個,全新的動態程序流控制、 位移貼圖、多渲染目標(MRT)、次表面散射 SubSurface Scattering、柔和陰影 Soft shadows、環境和地面陰影 Environmental and ground shadows、全局照明 (Global illumination)等新技術特性,使得GeForce 6、GeForce7系列以及Radeon X1000系列立刻為新一代遊戲以及具備無比真實感、幻想般的複雜的數字世界和逼真的角色在影視品質的環境中活動提供強大動力。

因此DirectX 9.0c和Shader Model 3.0標準的推出,可以說是DirectX發展歷程中的重要轉折點。在DirectX 9.0c中,Shader Model 3.0除了取消指令數限制和加入位移貼圖等新特性之外,更多的特性都是在解決遊戲的執行效率和品質上下功夫,Shader Model 3.0誕生之後,人們對待遊戲的態度也開始從過去單純地追求速度,轉變到遊戲畫質和運行速度兩者兼顧。因此Shader Model 3.0對遊戲產業的影響可謂深遠。

DirectX10

4 Directx -Win 2003中打開DirectX加速

剛剛安裝了Windows 2003,但是現在發現很多3D遊戲都不能運行,只有一些傳統2D平面遊戲還能勉強運行,而且速度很慢。感覺上Windows 2003在運行PhotoShop時很快,但是為何不能運行3D遊戲?

這並不是因為Windows 2003不支持3D遊戲,而是系統設置的問題。首先請確保以正確的方式安裝好顯卡驅動,然後就要打開DirectX加速。DirectX加速是3D遊戲最基本的需要,然而「為了」使Windows Server 2003更為單一地面向伺服器平台應用,微軟居然默認將其加速功能關閉。即便是在安裝了最新的DirectX 9.0之後也不會自動打開加速功能,而必須手動設置。在「開始」→「運行」對話框中輸入「dxdiag」以打開DirectX診斷工具。隨後在顯示一欄中將DirectDraw、Direct3D、AGP紋理加速功能啟用。如此一來,Windows Server 2003便能運行各種3D遊戲。除此以外,Windows Server 2003還默認關閉了硬體加速,你可以在顯示屬性的高級菜單中將其設置為完全加速。

5 Directx -用Delphi開發DirectX控制項

Microsoft推出的DirectX使我們在Windows9x下開發遊戲軟體便利了許多。一般在介紹DirectX 的資料里都講的是如何用VC++來開發,其實inprise公司的語言也可以用來開發基於DirectX的遊戲軟體。我們這裡用的是DirectX控制項,它有Delphi3和Delphi4不同的版本。在處你可以download,是由一個日本人寫的,而且,這套控制項是完全免費的,你可以自由使用。在這套控制項里有DirectX的各種范常式序,我們今天來討論一下其中基於DirectX的網路通信程序如何開發。

想必大家都看到過那些硝煙紛飛的即時戰略遊戲,這些遊戲中一個很誘人的買點就是可以幾個人同時加入戰鬥,各自扮演一方高手,殺它個你死我活。那麼這些即時戰略遊戲中的網路對戰部分是怎麼寫的呢?其實在Microsoft的DirectX中專門有一類API就是負責網路通信的,不管是基於IPX,還是TCP/IP,或者是Modem,它都可以圓滿解決。而作為程序設計的我們一般來說不用操心這些連接方式不同而帶來的代碼的不同,我們可以一視同仁,只要寫一套統一的代碼就可以了,各種連接方式的細節問題我們就交給DirectX去處理了。

下面我們具體分析一下一個chat聊天程序的構造。運行samples\network\chat.dpr,我們就看到了一個最簡單的聊天程序了。首先程序會讓你選擇連接的方式:IPX連接、Internet TCP/IP連接、數據機連接和串列連接;選擇好連接方式后(下面假設你是選擇用TCP/IP方式連接),你可以選擇是創建一個新遊戲還是進入一個已經存在的遊戲(當然現在這裡的遊戲就是指一個聊天程序!);如果你是選擇建立一個新遊戲,那麼接下來要你輸入遊戲的名字和你的名字,然後聊天就開始了;如果你是選擇加入一個已經存在的遊戲的話,那麼你可以通過輸入指定的IP地址來連接或者索性讓程序去搜索有哪些已經存在的遊戲名字。如果你在連接方式中選擇的是數據機連接的話,就稍微複雜一些,需要選擇數據機,並準備撥號和應答等。有沒有發現這些連接的方式和過程和我們通常在遊戲中看到的很相似?由於這些關於連接的對話框都是由DirectX提供的,因而會有一點語言上的問題。如果你安裝的是DirectX的中文版本的話,那麼你看見的將全部是中文。(順便說一句,這套Delphi 控制項所支持的DirectX必須在5.0版本以上。)
這個程序本身並不複雜,下面是其主要的幾個過程,我們已經加上了較為詳細的註釋:

//增加遊戲者

procedure TMainForm.DXPlay1AddPlayer(Sender: TObject; Player: TDXPlayPlayer);
begin

Memo1.Lines.Add(Format(' %s entered a room.', [Player.Name]));

end;

//遊戲者離開
procedure TMainForm.DXPlay1DeletePlayer(Sender: TObject;Player: TDXPlayPlayer);
begin
Memo1.Lines.Add(Format(' %s left a room.', [Player.Name]));
end;

//DirectPlay打開
procedure TMainForm.DXPlay1Open(Sender: TObject);
var
i: Integer;
begin
for i:=0 to DXPlay1.Players.Count-1 do
 if DXPlay1.Players[i].RemotePlayer then
 Memo1.Lines.Add(Format(' %s is entering a room.', [DXPlay1.Players[i].Name]));
end;

procedure TMainForm.FormDestroy(Sender: TObject);
begin
DXPlay1.Close;
end;

//窗口創建執行事件
procedure TMainForm.FormCreate(Sender: TObject);
begin
try
 //DirectPlay 打開
DXPlay1.Open;
except
//防錯處理
on E: Exception do
begin
Application.ShowMainForm := False;
Application.HandleException(E);
Application.Terminate;
end;
end;

//顯示有關信息在窗口的caption
MainForm.Caption := Format('%s : %s', [DXPlay1.ProviderName, DXPlay1.SessionName]);
end;

//當有消息發送時
procedure TMainForm.DXPlay1Message(Sender: TObject; Player: TDXPlayPlayer; Data: Pointer;DataSize: Integer);
var
s: string;
begin
case DXPlayMessageType(Data) of
DXCHAT_MESSAGE:
begin
if TDXChatMessage(Data^).Len %s', [Player.Name, s]));
end;
end;
end;

//發送按鈕
procedure TMainForm.Button1Click(Sender: TObject);
var
Msg: ^TDXChatMessage;
MsgSize: Integer;
begin
MsgSize := SizeOf(TDXChatMessage)+Length(Edit1.Text);
GetMem(Msg, MsgSize);
try
 Msg.dwType := DXCHAT_MESSAGE;
Msg.Len := Length(Edit1.Text);
StrLCopy(@Msg^.c, PChar(Edit1.Text), Length(Edit1.Text));
     
//發送消息到所有的人
DXPlay1.SendMessage(DPID_ALLPLAYERS, Msg, MsgSize);

//發送消息到自己
DXPlay1.SendMessage(DXPlay1.LocalPlayer.ID, Msg, MsgSize);
 Edit1.Text := '';
finally
FreeMem(Msg);
end;
end;

TDXPlay控制項是寫這類程序的關鍵,其屬性、事件和方法並不多。GUID屬性用來程序的自我識別,具有相同GUID的程序互相之間就能識別,所以你可以看到GUID是一個很長的數字;Open方法用來打開通訊埠,Close用來關閉通訊埠;SendMessage方法是用來發送消息到所有的遊戲者,當你的程序收到消息的時候,會產生OnMessage 事件。

這個程序的代碼應該是相當簡練了,但是卻完成了點對點的多點聊天功能。如果你在自己的程序里約定好一套規則,那麼你的程序也就具備了互相的通信能力,是不是感覺很簡單?可以說,利用DirectX來寫這方面的通信程序是最佳的選擇,你可以對網路的知識完全不懂,因為這一切已經由Microsoft花費了大量人力物力進行優化的代碼來完成了。如果說有什麼缺點,就是要求用戶的電腦上一定要安裝上DirectX,這在現在win98越來越普及的情況下,並不是一件難事。再說,Microsoft的DirectX也是一套完全免費的軟體。利用DirectX優秀的性能加上功能強大的 Delphi語言,相信你一定能寫出一套優秀的遊戲軟體(當然擁有設計良好的對戰功能)。

6 Directx -在Delphi中使用DirectX

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

DelphiX是由日本人Hiroyuki Hori開發的使Di rectX5.0在Delphi中更容易使用的一套控制項,從網上 下載時叫DelphiX.zip,837KB。解開后在bin目錄下 運行install_for?(根據你的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優化過的Form。

DirectDraw中重要的對象有:

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

TDirectDrawSurface對象

表徵了一塊內存區 域,在該區域的數據將作為圖像顯示在屏幕上或移動 到其它表面上。

TDirectDrawPalette對象

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

TDirectDrawClipper對象
幫助你禁止向表面的 某一位置或超出表面的位置塊寫數據。

TSprite對象

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

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

TdirectDrawDisplay對象
控制著DirectDraw的 顯示模式,TdxDraw.display是這樣一個對象。
DelphiX基本上嚴格按照Microsoft DirectX SDK 開發包來將其功能在Delphi中實現出來。所以,如果 你對DirectX SDK比較熟悉的話,你會發現大多數程 序從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);
{創建抽象圖像表面}
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三個過程,之後便 可以根據需要對錶面進行操縱。
另外,要完成上面程序的功能,還有其他不少辦 法。例如利用TDXImageList對象,可以用它的方法 Imagelist.items[N].draw來完成同樣功能。

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

上一篇[數值孔徑]    下一篇 [EOS]

相關評論

同義詞:暫無同義詞