【正文】
若干時間后球o運動到如圖16的位置。如圖14,假想o是桌面上的一個球,沿圓心作4個向量把圓平均分為4份。則v1在t上的分量v1t與v2在t上的分量v2t 動量守恒,由于兩球質(zhì)量相同~聯(lián)立動能守恒公式可得:碰撞后兩球的速度在t上的分量被交換??偟膩碚f碰撞就是預測未來幀—N物體是否發(fā)生接觸,如果物體發(fā)生了接觸則在第N1幀做出反射動作。先定義了一個LPDIRECT3DVERTEXBUFFER8類型變量m_pVertexBuffer,然后通過向頂點緩沖區(qū)內(nèi)填充點信息(包括材質(zhì)信息與頂點位置),這樣建立的模型不會有冗余信息,執(zhí)行效率非常高。g_pBackSurface, MAKEINTRESOURCE( IDB_BMP_BACK ),SCREEN_WIDTH, SCREEN_HEIGHT ) ) )來建立一個有目標位圖的Surface對象。Desc,amp。得到一個將要使用的DirectDraw7對象指針;⑶ 用SetCooperativeLevel(GetSafeHwnd(),DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN| DDSCL_ALLOWMODEX)函數(shù)設置程序的協(xié)作級別。但是作為一個游戲,必須要有一個游戲循環(huán),使游戲能夠不停的執(zhí)行下去,從PeekMessage()到DispathcMessage()都在While(TRUE)循環(huán)當中,如果沒有外部消息時,就進行GameLoop處理下一幀信息。5. ChangeSprites()決定場景中所有精靈的變化,這種改變是按照預定義的規(guī)則進行的。它的判斷條件是:如果最下面的一個板上升到一定的高度的時候,就隨機的生成一個新板并加入到精靈隊列中。LeapMan游戲中,游戲循環(huán)的主體是ProcessNextFrame()函數(shù),如果程序沒有收到WM_QUIT消息時就反復的執(zhí)行。程序中相應代碼是: LONG lRand = rand()%max。Sprite_Queue在滿足條件時更新角色隊列,從而實現(xiàn)這個動態(tài)變化的效果。 // INT nTop。//Player的運動方向}Player1。有了精靈的位置信息后,還需要考慮第二個問題:這些精靈最終要顯示在屏幕上的什么位置呢?同時,每個精靈是動態(tài)的,有速度的和次態(tài)的,這些信息又該如何表示呢?解決的方案如下:struct Player{ INT nmenIndex。SpriteInfo g_planeSprite[NUM_PLANE]。程序中利用宏定義一些標識個數(shù)的常量:define NUM_STING 1define NUM_SLIDE 8define NUM_SINK 6define NUM_SPRING 7define NUM_PLANE 1define NUM_MEN 80精靈鏈表如下:SpriteInfo g_menSprite[NUM_MEN+2]。 //標識Sprite在位圖中高度信息 }。 //標識Sprite在位圖中上臨界邊的象素值 INT nRight。也就是說需要六個精靈鏈表。在這個軟件當中,總共有六種Sprite,一種為Player,其它的就是程序中將要出來的五種檔板(普通板、彈板、滾板、軟板和釘板)。LeapMan中這么多的Sprite都在一張圖形當中(見附件)。顯示時圖片中像素值與ColorKey相同的就不會顯示在圖層上。根據(jù)系統(tǒng)時間,再結合BitBlt函數(shù),得到的效果圖如圖5和圖6: 圖5 動畫效果圖B圖6 動畫效果圖C很明顯,現(xiàn)在已經(jīng)能夠?qū)崿F(xiàn)動畫效果了,但是整個的畫面卻始終有一個黑的背景,如果能去掉背景色使之不顯示的話,才具備游戲開發(fā)的基本要求。倘若現(xiàn)在程序要求:原來顯示 的地方顯示為 ,如果能把已經(jīng)顯示了后者的內(nèi)存區(qū)域的拷貝到前者現(xiàn)有的內(nèi)存塊內(nèi),就可以達到了這種變化的效果。程序最終顯示出的程序拼圖效果如圖4。如果軟件中調(diào)用的功能硬件功能不支持時, DirectDraw 便利用硬件仿真層(HEL)來完成請求的這項操作。每一個三維游戲都需要很多物體,這里所述的物體不一定是玩家,它還包括場景中的房屋,樹木等三維物體,當物體太多的時候,每個角色不可能都靠軟件設計師計算得到,如果那樣的話工作量太大了。ViewPort決定程序顯示出三維場景的哪一部分,即看到計算機中的哪些場景。⑶ 支持光照與投影。這是3D的前提,實際上就是在計算機中建立一個三維坐標系。 開發(fā)3D游戲所需要的技術要開發(fā)一個三維游戲,首先要解決的問題就是構造一個虛擬的三維世界,給玩家的感覺如置身在現(xiàn)實世界一樣。⑹ 支持字體顯示、調(diào)色板技術和繪圖功能。如果能夠控制顯卡中顯示出來的數(shù)據(jù)區(qū)域,切換時只更換主顯存基址即實現(xiàn)了動畫。⑶ 支持ColorKey效果。在DirectDraw的誕生之前,每個游戲廠商都不得不寫自己的游戲引擎,而這種游戲引擎過多的依賴機器硬件所提供的圖形功能,而且往往會局限在某一種硬件平臺,所以當時的游戲開發(fā)具有相當大的困難。DirectX在開發(fā)游戲方面的強大功能將會在本文的論述中看到。這樣用DirectX編出的游戲不再擔心硬件功能不支持的問題了。為了解決這個問題,微軟公司開發(fā)出了DirectX SDK。圖形技術的解決方案有OpenGL和DirectX,OpenGL是三維圖形的API標準,但DirectX除了能解決三維圖形問題,而且支持2D圖形、音效管理、網(wǎng)絡互連、外設控制等,它作為一套完整的游戲開發(fā)包而成為事實上的行業(yè)標準。關鍵詞:游戲開發(fā) 游戲開發(fā)包 DirectDraw Direct3D DirectMusic DirectInput 游戲引擎Application of DirectX In Game DevelopmentHao xuefang(Department of Computer Science Hubei Normal University Huangshi 435002)Abstract: When Game was accepted by many people as a very important enterainment means,Gameindustry will bring to us enormous economic benefit indisputably. This dissertation aim to the most popular Operating System Windows and using the leading game development tools’ kits DirectX base it, discussing elementary how to develop a emphases is the use of DirectDraw and Direct3D in graphics processing in two dimension and three the simply introduce of DirectSound and DirectInput.Keywords: GameDevelopment DirectXSDK DirectDraw Direct3D DirectMusic DirectInput GameEngine目 錄一、引言…………………………………………………………...1二、游戲開發(fā)所需技術及DirectX簡介………………………….11.DirectX概述…………………………………………….…….12.開發(fā)平面游戲所需要的技術分析……………………………..23.開發(fā)3D游戲所需要的技術分析………………………………3三、平面游戲LeapMan的實現(xiàn)………………………………….41. DirectDraw在二維圖形處理方面的功能分析………………42.LeapMan游戲中圖片素材預置………………………………..73.概要設計與算法分析……………………………….. ………..74.LeapMan的詳細設計……………………………….. ………...10四、三維游戲Pool’s Up實現(xiàn)………………………………….121.三維模型的建立……………………………………………..122.碰撞算法分析………………………………………………..133.Direct3D在Pool’s Up中的應用……………………………15五、DirectInput與DirectSound在游戲開發(fā)中的應用…19六、結束語………………………………………………………..21致 謝………………………………………………………………...22參考文獻…………………………………………………………..23一、引言從2001年開始,游戲作為一種產(chǎn)業(yè)已經(jīng)漸漸的為中國大眾接受,它所帶來的經(jīng)濟效益和社會效益更是人們之前沒有估計到的。文章針對目前市場上流行的Windows平臺下的主導開發(fā)工具DirectX對游戲開發(fā)進行初步的探討,以兩個不同類型的游戲的實現(xiàn)過程來研究DirectDraw、Direct3D 在二維和三維圖形處理方面的應用,同時也對DirectSound、DirectInput也進行了初步的研究。游戲開發(fā)相對其他軟件開發(fā)來說特別復雜,它需要解決圖形顯示、網(wǎng)絡傳輸、聲音處理、I/O控制等問題,這些一般都必須借助游戲開發(fā)包(游戲引擎)來實現(xiàn)。游戲?qū)崟r性要求特別高,這使得稍大規(guī)模的游戲都無法在Windows GDI環(huán)境下運行。同時,DirectX也具有各種硬件仿真功能,如果調(diào)用的功能硬件加速器不支持,DirectX就利用自己的仿真加速器來實現(xiàn)同樣的效果。其他組件的功能也進行了進一步的擴展。2.開發(fā)平面游戲所需要的技術DirectDraw技術主要是為了解決二維平面游戲的問題而引入的。很多時候游戲中都會出現(xiàn)一些圖形相同的地方,例如兩位游戲角色的衣服,如果能指定圖片的某一部分顯示在指定的位置,不僅可以提高開發(fā)的靈活性,還可以使游戲所使用的圖片大大減少,這對提高游戲的執(zhí)行效率是非常關鍵的。在游戲中需要高頻率的切換場景時,如果通過不斷的調(diào)入內(nèi)存、顯示、調(diào)出內(nèi)存這樣一個反復的過程來切換圖片,效率將會變得很低。充分發(fā)揮計算機的并行處理能力,在顯示器輸出圖像的同時,把下一幀將要顯示的圖形拷貝到在另個顯存區(qū)域處理好,顯示的時候只要改變顯卡的顯示區(qū)域基址即可。⑼ 支持多種圖形格式。能夠開發(fā)一個三維游戲的游戲開發(fā)包都具有以下功能[9]:⑴ 構造虛擬的三維世界。這些功能都是基于坐標變換[14]的。⑸ 支持