天天看點

《Android 3D 遊戲案例開發大全》——6.6節遊戲界面相關類

本節書摘來自異步社群《android 3d 遊戲案例開發大全》一書中的第6章,第6.6節遊戲界面相關類,作者 吳亞峰 , 于複興 , 杜化美,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

6.6 遊戲界面相關類

android 3d 遊戲案例開發大全

前一小節為讀者介紹了輔助界面相關類,本小節将對遊戲界面相關類進行介紹,首先介紹遊戲界面的各個組成部分,然後介紹遊戲整體界面的開發,逐漸完成對遊戲界面的開發,下面就對這些類的開發進行詳細介紹。

6.6.1 頂點資料管理者vertexdatamanager

本小節為讀者介紹的是整個遊戲過程中所有物體頂點資料的管理者vertexdatamanager,具體開發步驟如下。

(1)首先為讀者介紹的是本類主要架構的開發,其代碼如下。

第4-10行是初始化該類的成員變量。第12-19行是進入菜單界面時加載物體頂點位置、紋理坐标資料進記憶體緩沖的方法。第21-44行是進入遊戲界面時加載物體頂點位置、紋理坐标資料進記憶體緩沖的方法。

(2)完成本類主體架構的開發後,接下來為讀者介紹的是初始化房間頂點資料的方法,其代碼如下。

第3-18行是房間的頂點坐标資料的初始化。第13行是房間的頂點數。第14-33行是房間的頂點紋理坐标的初始化。本類中一些方法與房間的頂點資料的初始化方法相似,由于篇幅所限這裡不再一一介紹,需要的讀者請自行查閱随書CD光牒中的源代碼。

(3)接下來介紹的是大星空頂點資料的初始化方法,星空是由一些随機生成的點組成的,其代碼如下。

第4-14行是星星頂點坐标資料的初始化,星星的頂點坐标是随機生成的。第16-34行是頂點的着色資料的初始化。小星空頂點資料的初始化和大星空頂點資料的初始化方法類似,這裡不再贅述,有需要的讀者請自行查閱随書CD光牒中的源代碼。

(4)接下來為讀者介紹的是遊戲界面中軟體箱子頂點資料的初始化方法,其代碼如下。

第2-16行是各種變量的聲明與初始化。第17-52行是頂點坐标數組與頂點紋理坐标數組的初始化,其原理為:箱子的高分成fd層,每層有8個頂點,循環到的層的頂點坐标由此8個頂點組成,其中第18-29行是每層的8個頂點坐标的計算。

第18和24行是本層上下兩排頂點的旋轉角度,根據目前層和傳入的箱子的旋轉的總角度計算,然後根據目前排的旋轉角度計算頂點坐标,計算公式為:x'=xcos (currangle)-zsin (currangle)和text{z }!!'!!text{ }=xsin (currangle)+zcos (text{currangle}),其中x和z為最底排頂點坐标中的x軸坐标和z軸坐标。

第53-62行是将頂點坐标數組和頂點紋理坐标數組中的資料分别存入相應的緩沖。

6.6.2 紋理圖資料管理者picdatamanager

上一小節為讀者介紹了遊戲中物體頂點資料的管理者,本小節為讀者介紹的是遊戲中紋理圖資料的管理者picdatamanager,其代碼如下。

第4-6行是聲明該類中成員變量。第7-13行是聲明并初始化數組texnamearray,該數組中存放的是本遊戲中用到的所有紋理圖的名字。

第28-44行是兩個方法loadpicdata,兩個方法實作的功能是将加載界面的圖檔資料和其他界面的圖檔資料加載進記憶體。

第46-62行是方法loadfromassets,該方法實作的功能是從assets中加載一幅紋理圖。

6.6.3 遊戲界面txzgamesurfaceview

前面小節為讀者介紹了遊戲界面中用到的頂點資料與紋理資料,接下來為讀者介紹的是遊戲界面的整體類txzgamesurfaceview,其是整個遊戲的重要組成部分,其具體的開發步驟如下。

(1)介紹本類具體開發代碼之前,首先為讀者介紹的是本類的主要架構,其代碼如下。

第4-58行是成員變量的聲明與建立。第59-66行是該類的構造器,其對相關成員變量進行了指派,并建立渲染器、設定渲染器,同時設定渲染模式為主動模式。

(2)介紹完本類的主要架構後,接下來為讀者介紹的是本類中的觸控方法,首先介紹觸控方法的架構,其代碼如下。

第7-14行是外層搖杆的觸控邊緣位置。第16-21行是根據外層搖杆的觸控邊緣位置計算出的搖杆中心點的位置和搖杆的半徑。

第22-23行是獲得觸控位置。第24-34行表示的是判斷是何種動作并作出相應操作。第35-36行是更新上一次的觸控位置。

(3)介紹完觸控方法的架構之後,接下來介紹的是上一步中省略的按下操作的代碼,其代碼如下。

第10-17行是判斷觸控點是否在搖杆内,如果在搖杆内則将觸控點在搖杆内的标志位置為true。

第18-35行是判斷觸控點是否在轉換視角的按鈕範圍内,是則做出相應的操作。

第36-51行是觸控點在輸赢界面的傳回按鈕上,則傳回到菜單界面。

第52-77行是觸控點在輸赢界面的下一關或重玩按鈕上,則進入下一關或重新進入本關。

(4)前面介紹了按下動作的處理代碼,接下來介紹的是移動動作的處理代碼的開發,其代碼如下。

第2-7行是判斷是否移動動作。第9-19行是如果不在第一視角内、移動動作标志位為true,并且按下的初始位置不在搖杆内,則将改變錄影機的動作添加到動作隊列。

第20-27行是如果移動标志位為true,并且按下的初始位置在搖杆内,則将搖杆動作添加到動作隊列。第28-36行是如果為前進動作,則将前進動作添加到動作隊列,并将前進标志位置為false。

(5)介紹完移動動作處理代碼的開發後,下面為讀者介紹的是前面省略的擡起動作時處理代碼的開發,其代碼如下。

第2-7行是将擡起動作添加到動作隊列。第8-32行是如果按下的初始位置在搖杆内,則根據搖杆的不同動作将機器人的不同動作添加到動作隊列。

(6)介紹了本類的觸控方法後,接下來介紹的是本類中的内部類scenerenderer,首先介紹其中的重寫方法,其代碼如下。

第2-5行是各種成員變量的聲明。第6-17行是本内部類中的繪制方法ondrawframe。第18-28行為重寫onsurfacechanged方法,在該方法中設定了視口的大小和位置,計算了寬高比,同時打開了背面剪裁。

第31-37行設定了關閉抖動、使用快速模式、打開深層檢測、打開背面剪裁,并設定為平滑着色。

第38-50進行了一些成員變量的初始化。第51-61行建立并開啟了改變軟體箱子動畫幀的線程。第62-74行建立并開啟了改變天空旋轉角度的線程。

(7)接下來為讀者介紹的是遊戲界面的繪制方法,首先介紹倒影的繪制,其代碼如下。

第7行是調用方法cameraposition進行錄影機的設定,方法cameraposition是根據目前為第一視角或第三視角設定了錄影機,其中還對軟體箱子進行了排序,由于篇幅所限,這裡不再詳細介紹,有需要的讀者可檢視随書CD光牒中的源代碼。

第8-21行是将繪制資料複制進臨時變量。第22-43行是倒影的繪制。第44-48行是水面的繪制。

(8)介紹完倒影的繪制後,接下來為讀者介紹的是實體、搖杆和轉換視角虛拟按鈕的繪制,其代碼如下。

第4-13行是機器人、房間和天空的繪制。第14-43行是循環關卡數組繪制除軟體箱子外的實體。第44-61行是軟體箱子的繪制。

第62-89行是搖杆和轉換視角的虛拟按鈕的繪制。第90行是調用方法判斷遊戲是否結束,并繪制結束界面的标志,由于篇幅所限,這裡不再介紹,讀者可檢視随書CD光牒中的源代碼。

6.6.4 動作隊列執行線程txzdoactionthread

本遊戲将除搖杆動作外的操控動作對象存儲在了一個操控隊列,本節為讀者介紹的是從此操控隊列中取出操控動作進行執行的線程,其具體的開發步驟如下。

(1)首先給出的是該類的架構,隻有了解了架構才能更好地進行開發,其代碼如下。

第4-10行是成員變量的聲明。第11-15行是該類的構造方法,其在其他類建立該類對象時被調用。

第19-22行是從動作隊列的隊首取出一個操控動作。第25-43行是判斷是何種動作,然後做出相應的操作。

(2)接下來為讀者介紹的是上一步驟中省略的機器人前進動作的相應操作,其代碼如下。

第9-11行是機器人遇到的是水和擺好的木箱時不做任何動作。第12-22行是遇到的是目标時,機器人向前走。

第23-29行是遇到的是人在目标點上,機器人向前走。第30-41行是遇到橋或人時,機器人向前走。第42-72行是遇到的是箱子時的操作,判斷箱子前面是什麼,是否能走。

圖像說明文字 提示

前面省略的機器人動作的方法十分簡單,由于篇幅問題,這裡不再一一贅述,需要的讀者可自行查閱随書CD光牒中的源代碼進行學習。

繼續閱讀