游戲編程導(dǎo)論 Chapter-07_第1頁
游戲編程導(dǎo)論 Chapter-07_第2頁
游戲編程導(dǎo)論 Chapter-07_第3頁
游戲編程導(dǎo)論 Chapter-07_第4頁
游戲編程導(dǎo)論 Chapter-07_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、第7章 為引擎添加游戲角色模塊內(nèi)容提綱 7.1關(guān)于圖層的概念7.2構(gòu)建游戲圖層類7.3創(chuàng)建游戲角色類7.3.1 游戲角色類的設(shè)計7.3.2 游戲角色類的實現(xiàn)7.4為游戲角色類添加AI控制7.4.1 AI類的基本需求與設(shè)計7.4.2 AI類的實現(xiàn)7.5游戲角色類及AI類應(yīng)用實例第7章 為引擎添加游戲角色模塊游戲角色是圖層,游戲背景或游戲地圖、子彈、爆炸效果等也都是圖層。這些與游戲內(nèi)容相關(guān)的各圖層構(gòu)成了完整的游戲場景。從面向?qū)ο蟮慕嵌葋砜?,游戲角色、游戲地圖或背景等可以進(jìn)一步抽象為游戲圖層。在構(gòu)建游戲角色類之前,我們首先要設(shè)計更抽象的游戲圖層類,在其中定義游戲圖層共有的屬性或函數(shù),然后再從圖層類派

2、生出游戲角色類。7.1 關(guān)于圖層的概念一個完整的游戲場景是由若干游戲圖層疊加而成。游戲狀態(tài)的每一次更新,組成場景的各圖層,如果有位置或狀態(tài)變化,要按照游戲邏輯在場景中重新合成,以反映最新游戲狀態(tài)。圖層繪制到屏幕時,會有先后順序,這就是所謂的Z-Order后繪制的圖層總是在先繪制的圖層之上。游戲圖層繪制時,要處理好各圖層之間的Z-Order,尤其是游戲中存在前景、背景的情況下,要處理好圖層之間的被遮擋關(guān)系。游戲圖層除了Z-Order屬性外,每個圖層都有自己的寬、高屬性、坐標(biāo)位置,有時圖層還要設(shè)置是否可見。為了標(biāo)識圖層類型,可以為圖層設(shè)置一個標(biāo)識,這樣在處理時可以作為判斷的依據(jù)。對于圖層操作,從抽

3、象角度看,有兩個通用操作:(1)繪制:每個圖層都要繪制,只是繪制的具體步驟或方法不同;(2)移動:如果圖層是游戲角色、子彈、地圖等都會用到移動操作。7.2 構(gòu)建游戲圖層類圖層類將作為抽象基類圖層類命名為T_Layer圖層類將分別在T_Layer.h和T_Layer.cpp中實現(xiàn)T_Layer類的定義和實現(xiàn):實現(xiàn)代碼請參見教程類中定義的Draw()純虛函數(shù),是為了規(guī)定所有派生類必須具備該操作,同時也是為后續(xù)編寫場景管理類做準(zhǔn)備7.3 創(chuàng)建游戲角色類7.3.1 游戲角色類的設(shè)計游戲角色類命名為T_Sprite。T_Sprite類主要涉及游戲角色3個方面處理:圖像處理:主要包括圖像加載、繪制及動畫處

4、理。在動畫處理方面,涉及幀圖像旋轉(zhuǎn)與翻轉(zhuǎn)、幀圖像縮放或透明度修改、幀圖像繪制等狀態(tài)處理:T_Sprite類除繼承T_Layer類的數(shù)據(jù)成員外,還增加了角色特有的數(shù)據(jù)成員,如移動方向、移動速度、游戲分值、游戲等級等碰撞檢測:NPC之間的碰撞、玩家角色與NPC之間的碰撞、NPC或玩家角色與游戲地圖中障礙物的碰撞碰撞檢測的方法有:區(qū)域檢測、點檢測及像素檢測等。其中像素檢測精度最高,但也是處理速度最慢的檢測手段。在一般游戲中,使用區(qū)域檢測就足以滿足需求,這種檢測方式速度快,只是有時會判斷不夠準(zhǔn)確。7.3 創(chuàng)建游戲角色類7.3.2 游戲角色類的實現(xiàn)T_Sprite類的定義和實現(xiàn):實現(xiàn)代碼請參見教程T_S

5、prite類的數(shù)據(jù)成員按照功能需求分為三個類別:與角色圖像相關(guān)的屬性與角色狀態(tài)相關(guān)的屬性與碰撞檢測相關(guān)的屬性T_Sprite類的函數(shù)說明:3個調(diào)用頻率高的函數(shù)以內(nèi)聯(lián)方式實現(xiàn): AdjustCollideRect()GetCollideRect()CollideWith()其它要實現(xiàn)的函數(shù)共有7個:T_Sprite類構(gòu)造函數(shù)Initiate()LoopFrame()LoopFrameOnce()Draw()MoveTo()GetDir()7.3 創(chuàng)建游戲角色類補充:T_Util通用工具類的實現(xiàn)T_Util通用工具類是一個簡單的類,目前只有兩個函數(shù):int_to_wstring()類型轉(zhuǎn)換函數(shù)Ge

6、tBevelSpeed()計算函數(shù)新建T_Util.h頭文件和對應(yīng)的T_Util.cpp源文件,它們也將作為游戲引擎的附加組成部分。7.3 創(chuàng)建游戲角色類T_Util.h頭文件代碼:#pragma once#include T_Config.h“class T_Utilpublic:static wchar_t * int_to_wstring(int i);/ 根據(jù)輸入的三個參數(shù)所指定的起點、終點坐標(biāo)和移動速度, / 計算斜角移動時X軸與Y軸的分量值,/ xRatio與yRatio為輸出參數(shù), 即最終計算結(jié)果/ 本函數(shù)會自動判斷方向:/ xRatio、yRatio為正值,表示朝右、下移動/

7、xRatio、yRatio為負(fù)值,表示朝左、上移動static void GetBevelSpeed( IN POINT startPT, IN POINT destPT, IN int Speed, OUT int& xRatio, OUT int& yRatio);7.3 創(chuàng)建游戲角色類T_Util.cpp源文件int_to_wstring()函數(shù)實現(xiàn)代碼:wchar_t * T_Util:int_to_wstring(int i)wchar_t *w_str;w_str = new wchar_t20;if(!w_str)delete w_str;return NULL;swprintf

8、(w_str, 20, L%d , i);return w_str;7.3 創(chuàng)建游戲角色類T_Util.cpp源文件GetBevelSpeed()函數(shù)實現(xiàn)代碼:void T_Util:GetBevelSpeed(IN POINT startPT, IN POINT destPT, IN int Speed, OUT int& xRatio, OUT int& yRatio)float aX,bY;if(destPT.x startPT.x)aX = (float)(destPT.x - startPT.x);elseaX = (float)(startPT.x - destPT.x);if(d

9、estPT.y startPT.y)bY = (float)(destPT.y - startPT.y);elsebY = (float)(startPT.y - destPT.y);if(aX=0 | bY=0)xRatio = 0;yRatio = 0;return;7.3 創(chuàng)建游戲角色類if(bYaX)yRatio = Speed;xRatio = (int)(Speed*aX)/bY);elsexRatio = Speed;yRatio = (int)(Speed*bY)/aX);if(startPT.x-destPT.x = 0) xRatio = 0;if(startPT.y-de

10、stPT.y = 0) yRatio = 0;if(startPT.x-destPT.x 0) xRatio = -xRatio;if(startPT.y-destPT.y 0) yRatio = -yRatio;7.3 創(chuàng)建游戲角色類一般游戲中的角色,無論玩家角色還是NPC,或者是游戲中的子彈、爆炸效果等,都可以使用T_Sprite類進(jìn)行管理。有特殊需求的游戲角色,可以以T_Sprite類為基類進(jìn)行派生,重新定義或重寫不能滿足需求的數(shù)據(jù)成員或函數(shù),也可以增加自身特有的數(shù)據(jù)成員或函數(shù)。T_Sprite類可以讓角色動起來,但還無法處理角色移動過程中碰到敵人或障礙物時的躲避行為。7.4 為游戲角色

11、類添加AI控制基本的“智能”行為:躲避敵人。增加T_AI類(對應(yīng)的頭文件和源文件分別是T_AI.h和T_AI.cpp),在該類中來處理角色在移動過程中碰到敵人或障礙物時的基本躲避行為。該類只處理角色的簡單躲避行為、角色在指定范圍的漫游行為以及防止角色之間相互疊加的處理等。其它的AI算法,請學(xué)習(xí)者自己的學(xué)習(xí)情況,往T_AI類中添加新的功能。7.4 為游戲角色類添加AI控制7.4.1 AI類的基本需求與設(shè)計除少數(shù)二維游戲游戲角色可以任意角度移動,一般游戲都把角色的移動局限在四個方向(即上、下、左、右),或者八個方向(即上、下、左、右、左上、左下、右上、右下)。T_AI類中,游戲角色的移動可以是四方

12、向模式,也可以是八方向模式。在AI處理中,T_AI類將處理角色的躲避行為、漫游行為以及角色重疊的情況,最多只考慮八個方向的可能性。所謂躲避,實際上就是角色改變前進(jìn)方向,朝著與前進(jìn)方向不同的方向移動??梢园延螒蚪巧谝苿訒r對應(yīng)的八個方向可能會采用的躲避方向枚舉出來。躲避時,從前進(jìn)方向?qū)?yīng)的躲避方向中隨機抽取一個方向進(jìn)行躲避。7.4 為游戲角色類添加AI控制定義躲避方向的二維數(shù)組:在T_AI類中定義一個靜態(tài)的整型二維數(shù)組:數(shù)組的第一維是前進(jìn)的八個方向,其元素索引號與T_Config.h頭文件中定義的GAME_DIR常量是一致的;數(shù)組的第二維表示每個方向可能的躲避方向,其元素值也是GAME_DIR常

13、量值,每個前進(jìn)方向最佳的躲避方向只有五個。7.4 為游戲角色類添加AI控制二維數(shù)組定義如下: int T_AI:EvadeDir85 = /DIR_LEFT躲避方向DIR_RIGHT, DIR_DOWN, DIR_UP, DIR_RIGHT_UP, DIR_RIGHT_DOWN,/DIR_RIGHT躲避方向DIR_LEFT, DIR_DOWN, DIR_UP, DIR_LEFT_UP, DIR_LEFT_DOWN,/DIR_UP躲避方向DIR_DOWN, DIR_LEFT, DIR_RIGHT, DIR_LEFT_DOWN, DIR_RIGHT_DOWN,/DIR_DOWN躲避方向DIR_UP

14、, DIR_LEFT, DIR_RIGHT, DIR_LEFT_UP, DIR_RIGHT_UP,/DIR_LEFT_UP躲避方向DIR_RIGHT_DOWN, DIR_RIGHT_UP, DIR_RIGHT, DIR_UP, DIR_DOWN,/DIR_LEFT_DOWN躲避方向DIR_RIGHT_UP, DIR_RIGHT_DOWN, DIR_RIGHT, DIR_UP, DIR_DOWN,/DIR_RIGHT_UP躲避方向DIR_LEFT_DOWN, DIR_LEFT_UP, DIR_LEFT, DIR_UP, DIR_DOWN,/DIR_RIGHT_DOWN躲避方向DIR_LEFT_U

15、P, DIR_LEFT_DOWN, DIR_LEFT, DIR_UP, DIR_DOWN;7.4 為游戲角色類添加AI控制以上這個整型二維數(shù)組是完整的八個方向的躲避方向:如果角色移動采用8個方向的模式,可以對整個數(shù)組進(jìn)行檢索。如果角色移動采用4個方向的模式,則只能檢索這個二維數(shù)組中第一維的前面4個元素,以及第二維的前面3個元素。7.4.2 AI類的實現(xiàn)T_AI類將分別在T_AI.h和T_AI.cpp中實現(xiàn)。T_AI類的定義和實現(xiàn):實現(xiàn)代碼請參見教程T_AI類的函數(shù)說明:兩個基礎(chǔ)函數(shù):GetHitRect()GetMoveCoord()三個功能函數(shù):在以上兩個函數(shù)基礎(chǔ)上實現(xiàn),都要利用EvadeD

16、ir獲取隨機躲避方向:Wander()Evade()CheckOverlay()7.5 游戲角色類及AI類應(yīng)用實例應(yīng)用T_Sprite類和T_AI類編寫貪食魚游戲雛形程序在本例中,T_Sprite類用來管理玩家角色和眾多NPC。當(dāng)移動鼠標(biāo)時,代表玩家角色的魚會朝鼠標(biāo)方向移動;代表NPC的魚由計算機控制,會自主移動和改變方向。T_AI類用來處理實例中NPC角色的躲避行為。當(dāng)這些NPC在游動過程中遇到玩家角色,會自動躲避。本實例運行效果(紫色熱帶魚是玩家角色,其它魚是NPC):7.5 游戲角色類及AI類應(yīng)用實例操作步驟簡述:1.在Visual Studio 2008中新建一個名為GameTest的項目;2.引入現(xiàn)有的16個引擎文件:T_Config.h頭文件T_Display類(包括T_Display.h和T_Display.cpp文件)T_Engine類(包括T_Engine.h和T_Engine.cpp文件)T_Graph類(包括T_Graph.h和T_Graph.cpp文件)T_Menu類(包括T_Menu.h和T_Menu.cpp文件)T_U

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論