Android 游戲設計教程:游戲元素和工具

openkk 12年前發布 | 72K 次閱讀 Android Android開發 移動開發

作者:Richard A. Rogers

(本節內容選自《Learning Android Game Programming》這本書,主要分享針對Android設備開發游戲的基本原則和方法。)

創造優秀手機游戲不僅需要編寫某些相當復雜的軟件,還需要創造其他的成分,比如圖像、動畫、音效和音樂。幸運的是,這些成分都能夠使用某些工具制作而成,而且許多工具可以免費使用。如果你能夠上網并且擁有開發游戲的設備,那么你就可以獲得所有所需的工具。

《Virgins Versus Vampires》(游戲邦注:以下簡稱V3)這款游戲使用Java編程語言編寫而成,可在Android設備上的Dalvik虛擬機上運行。游戲使用的 是名為AndEngine的開源游戲引擎和Box2D物理引擎,這兩者都已經移植到Android系統上。游戲及其所有的知識產權都是使用免費的軟件開發 工具、圖像工具和音頻創造出來的,所有這些工具都將在本章節中進行說明。

需注意的是,我們正在編寫的游戲是標準Android應用。它們以Dalvik/Java編寫,可以完全使用Android API,它們擁有我們預想的Android應用所擁有的特征(游戲邦注:比如暫停和重新開始)。我們的游戲將會連接至AndEngine庫,每個都會有供 游戲使用的Android應用程序包文件(游戲邦注:下文簡稱“apk”)中的庫副本。

軟件開發工具

我們需要軟件開發工具來編寫軟件。幸運的是,有些絕妙的工具可以用來編寫手機游戲等程序。更為幸運的是,許多此類工具可以免費下載和使用,即便我們是出于商業目的而開發游戲。

Android軟件開發工具包(游戲邦注:下文簡稱“SDK”)

如果你對Android SDK還不熟悉,先別看下面的內容,花些時間來熟悉這個工具。可以先瀏覽http://developer.android.com/上的下載和安裝說明。

Android SDK使用Eclipse來塑造集成開發環境(游戲邦注:下文簡稱“IDE”)和帶有Oracle的Java開發工具包(游戲邦注:下文簡稱“JDK”) 的工具。Android網站上的安裝說明會指導你如何安裝Android SDK。你在本書中看到的范例和圖像都是使用以下版本的組件構建而成的:Android SDK;Android SDK平臺組件4.0;Android SDK工具,r14;用于Eclipse 14.0.0的ADT插件;Eclipse Helios;Oracle或Sun JDK(游戲邦注:即JDK6,也稱為JDK 1.6)。

你可能使用的是比上述工具更新的版本,無需為此擔心,范例代碼與工具版本并無很大的關聯。如果確實出現了問題,訪問本書的合作網站 https://github.com/portmobile/LAGP-Example-Code,看看是否有針對較新版本發布的更新內容。在這本書編 寫之時,當前Android版本為4.0,也就是Ice Cream Sandwich。

你還應當為自己計劃支持的每種設備制作Android虛擬設備(游戲邦注:下文簡稱“AVD”),可以使用Android SDK和附屬于SDK的AVD管理器。針對這本書中展示的范例,我們制作出很像HTC的EVO智能手機的AVD,相關數據如下:

名稱:EVO

目標:Android 2.2(API等級8)

皮膚:HVGA

SD卡:128M

加速計:有

LCD密度:160

音頻輸出:有

攝像頭:無(游戲邦注:該版本模擬器不支持,而且游戲不需要攝像頭)

電池:有。

你還應當瀏覽下SDK教程,熟悉下整個過程,包括:創建Android項目;編寫代碼;構建項目;于Android模擬器上運行項目;使用 Eclipse debugger、LogCat及SDK提供的其他工具來解決項目中的漏洞。如果你計劃將游戲發布到Android Market上,你還需要確保它確實能夠在真正的手機上良好運行,所以你還應當擁有在Android手機上加載和運行.apk文件的經驗。

Android開發者站點上的指導文件很全面。如果你需要其他的指導或更多范例,還有許多優秀的Android編程書籍可供選擇,包括由 Lauren Darcey和Shane Conder編寫的《Sam’s Teach Yourself Android Application Development in 24 Hours》。

AndEngine游戲引擎庫

AndEngine是個游戲引擎庫,使得針對Android設備編寫二維游戲更加容易。Nicolas Gramlich費盡心思創造了AndEngine,并編寫了大量項目代碼。它是開源項目,所以你可以前往項目網站加入AndEngine的開發計劃。

當然,我們也可以用Java來自行編寫例行程序,使用Android API來執行游戲各組件。然而,利用已經編寫完成的游戲引擎有諸多好處:

1、我們可以使用其他人的工作成果。當然,如果我們真想這么做的話,也可以針對Android編寫自己的IDE,但是除非我們需要某些特別功能,否則這完全是毫無意義的舉動。

2、以AndEngine中使用的此類開源代碼為基礎,我們可以根據自己的需要來擴展引擎功能。如果擴展對其他人同樣有用,我們可以將這些調整內容放回開源引擎庫,助其他使用者改善引擎。

3、當我們遇到問題時,我們可以向使用相同技術的開發者社區尋求幫助。有可能其他人已經解決了我們所面臨的問題,可以提供問題的解決方案。

4、我們可以借用許多開發者的最優化方案。游戲需要使用相當數量的計算資源來繪制圖像、計算客觀物理效果、演奏音效和掌握用戶輸入方式。如果使用游戲引擎,我們便可以使用已經得出的最優化方案。

其他針對Android的游戲引擎目前正在開發中,本書主要闡述使用AndEngine的方法。有關AndEngine的重要網站如下:

1、AndEngine源代碼庫:http://code.google.com/p/andengine/

2、范例源代碼庫:http://code.google.com/p/andengineexamples/

3、AndEngine社區論壇:http://www.andengine.org/forums/

4、AndEngine維基頁面:http://wiki.andengine.org/AndEngine

如果以上網站內容無效,只需要用瀏覽器搜索“AndEngine Android”,應當就可以找到當前可用的內容。

AndEngine是個.jar文件,也就是Java文檔。在本章節隨后的內容中,當我們開始進行游戲代碼編寫時,你就會知道如何配合使用這些文檔 和你的Android SDK項目。該引擎采用GNU Lesser GPL License,你可以出于幾乎所有合理的目標來使用源代碼(當然要注意這里所涉及的授權問題)。

AndEngine游戲概念

我們之前提到的電影類比法是AndEngine的理想入門方法。你的游戲就像是電影,游戲引擎包含了類似于電影制作所涉內容的諸多概念。

鏡頭

游戲中的“鏡頭”決定了游戲呈現給玩家的景象。這很像二維空間中的電影鏡頭。鏡頭可以在場景中移動,改變所呈現的景象。鏡頭的移動既可以由玩家來控制,也可以由程序驅動。

場景

同電影一樣,游戲也是由一系列發生動作的場景構成。在電影中,場景以固定的方式編輯拼接起來。在游戲中,場景呈現順序由游戲過程決定。游戲就像是匆忙編輯完成的電影。

層次

場景由多個圖像層次組成。各層次按一定順序疊加,很像早期用來制作卡通的動畫紙。層次還可以用來創造2.5D效果,隨著鏡頭的移動,較近的層次移動得比較遠層次快。

精靈

精靈指電影中表演者的視覺呈現,無論這些表演者是人還是物品。精靈可能是動畫形式,也可能不是,但它們往往在游戲過程中隨場景移動。精靈質感往往從由許多精靈圖片組成的大圖片加載而得。

實體

在AndEngine中,實體指所有屏幕上繪制的東西。精靈是實體,顯示在屏幕上的瓦片、集合形狀和線條都是實體。所有的實體都擁有可以用調節器來改變的資產,比如顏色、角度、范圍和位置。

調節器

調節器可以改變實體的資產,在AndEngine中它們有強大的力量。它們可以用在任何實體上,它們造成的改變既可以馬上呈現也可以在規定的間隔時間內逐漸呈現。在我們的游戲中,我們頻繁使用調節器來創造精靈和其他實體的效果。

紋理

2D紋理,我們通常可以利用位圖圖像賦予物體紋理。紋理決定實體的視覺效果,許多OpenGL圖像環境是圍繞紋理的使用構建而成。

紋理區域

紋理定義完整的位圖圖像,紋理區域定義的是區域子集。隨后我們會頻繁提及2D圖像表現最優化,而使用紋理區域來繪制大型組合型位圖中的小區域是執行這些最優化方案的關鍵技巧。

引擎

場景運行通過引擎來是實現。它負責讓動畫和調節器知道何時更新呈現的圖像,協調繪圖,處理用戶輸入事件(游戲邦注:如觸點、按鍵和傳感器事件),通常還管理游戲的進程。引擎很像是電影的制作人或導演,告訴所有人應盡的職責。

BaseGameActivity

這個類擴展了Android Activity類,將是我們所設計游戲中所有場景的基礎。BaseGameActivity負責所有場景都需要做的事情,設立游戲引擎,滿足 Android Activity Lifecycle要求并使傳感器可用。我們將在第3章中更深入地探討這個類。

物理連接器

AndEngine的基礎引擎中包含了基本物理能力,但Box2D物理引擎大幅擴展了這些能力。我們通過物理連接器將AndEngine物體同Box2D連接起來。如果你的游戲不使用Box2D物理引擎,那么你就無需有物理連接器。

Box2D物理引擎

AndEngine包含了Box2D物理引擎的開源JBox2D端口。它可以用來逼真地模擬物理物體的以下互動形式:剛體的物理效果;穩定的物體堆積;重力效果;自定義單位;碰撞和接觸;滑動摩擦;正方形、圓形和多邊形;多種連接類型;睡眠狀態。

圖像工具

任何電子游戲的開發都離不開大量的圖像元素。我們需要繪制背景,還需要制作某些精靈的動畫。許多工具可以用來管理電腦圖像,專業化工具也相當高端精 良。如果你是個圖像設計師,而且知道如何使用Adobe Illustrator或其他專業工具,你可以無需閱讀這個部分的內容。

相反,如果你跟我一樣,缺乏足夠的圖像制作經驗或才能,而且開發資金較少,那么可以看看這個部分的內容。本部分將主要描述我為V3這款游戲創作圖像的工具(游戲邦注:下文所闡述的工具多數是免費的)。這些工具都很不錯,廣被專業人士所用。

你可能會試圖直接從網絡上獲取游戲圖像。如果你這么做的話,就要確保你擁有使用這些圖像的權利,你可以下載圖像并不等同于你有權利使用圖像。如果你計劃靠該游戲盈利,那么“商業化”使用其他人的圖像將帶來很棘手的問題。

你或許也知道,繪制圖片的圖像程序分為兩大類別:可于用來繪制和控制圖像化物體的程序(游戲邦注:也稱為“繪圖程序”),以及可以在畫布上創建顏色位圖的程序(游戲邦注:也稱為“上色程序”)。每種類別都有自己的用途,兩種程序在V3的創作中都會用到。

矢量圖像:Inkscape

我發現用矢量圖像來繪畫很方便,主要有以下兩個原因:

1、圖畫中的每個組件都被視為一個物體。在你創作最終圖畫時,物體可以被獨自移位、縮放、旋轉和編輯。

2、組件和整個圖畫可以在不影響分辨率的前提下輕易縮放。這種能力對精靈來說特別重要,因為其最終形態通常很小。縮放矢量圖像也可能遇到問題,所以你在繪制組件時應當盡可能貼近其最終版本的大小,但在必要的時候可以靈活地縮放總是件很棒的事情。

Inkscape(游戲邦注:網址為http://www.inkscape.org/)是個非常流行的矢量繪圖程序包。

許多Linux系統中會自帶這個軟件,它也可以在各版本Windows和Mac OS X系統中運行。其下載安裝包中包含大量的“幫助”內容和教程。如果你已經精于圖像制作,那么很快便可以熟練使用這個工具。如果你跟我差不多,在圖像制作方 面缺乏經驗和才能,可能需要花長一點的時間來熟悉這個工具,但比起學習Adobe Illustrator來說依然要快得多。而且,這個工具是免費的。圖2.1顯示Inkscape打開一張蝙蝠圖片的效果。

Android 游戲設計教程:游戲元素和工具

圖2.1 inkscape(from gamecareerguide)

基礎AndEngine游戲引擎難以呈現矢量圖像,但是我們可以開發能夠實現上述目標的擴展。在V3中,我的做法是使用Inkscape來創作圖 像,將它們編輯入核心內容中,縮放至合適的像素,保存成矢量版本(即.svg),以.png(即便攜式網絡圖形)文件格式導出,如果必要的話,使用 GIMP來制作透明背景。得到的位圖圖片(仍是.png格式)就是基礎AndEngine能夠識別的圖片文件。

位圖圖像:GIMP

GIMP(游戲邦注:即GNU圖像操作程序,網址為http://www.gimp.org/)是個使用者遍布全球的跨平臺位圖涂色程序。多數 Linux系統自帶該工具,該工具也是免費的。GIMP小組本身并不為Windows和Mac OS X提供支持,但現在已經出現了能夠在這兩個操作系統中運行的可下載版本。

Android 游戲設計教程:游戲元素和工具

圖2.2 GIMP位圖編輯器(from gamecareerguide)

圖2.2顯示的是與圖2.1相同的蝙蝠圖片。這里的蝙蝠圖片以位圖的形式呈現(在Inkscape中將矢量繪圖保存為.png文件便可以得到)。正 如你所看到的那樣,結果顯示圖片在此等大小下更具顆粒感,帶有透明的背景,這正是我們制作精靈動畫手繪所需的東西。在我們呈現精靈的時候,背景將通過透明 區域展示出來。

動畫捕捉:AnimGet

生成動畫是個乏味且頗耗時間的工作。你需要為游戲中用到的每個動畫手繪、每個角度和每個姿態創作繪圖。

制作3D動畫是個捷徑,目前可使用的3D工具很多(游戲邦注:Blender是個被設計師廣泛使用的開源工具,3Ds Max、Poser和Maya也是較為流行的商業化工具)。隨后,你可以根據自己需要的視角來播放2D動畫。你最終會得到AVI或動畫GIF文件,隨后你 需要將其分解成獨立的幀(這樣才能將它們重新整合進精靈層中)。Michael Menne創造了稱為“AnimGet”的工具,可以為你完成分解工作。該工具可以在網絡上的許多地方下載到(用Google搜索“AnimGet”即 可),它只能在Windows系統下運行。

AnimGet背后的概念是很精巧的。該工具的原理并不復雜,只是監視你屏幕上的某個固定區域。它先復制下最初像素,然后每10毫秒查看1次。如果 該區域內的像素發生改變,AnimGet會復制下該區域的新狀態,以新文件的形式保存。整個過程在內存中完成,所需時間并不長,但是你需要細心地選擇工具 查看的區域,這樣它就只會關注你感興趣位置的動畫。當你告訴AnimGet停止捕捉動畫時,之前復制的圖片會以獨立文件的形式保存。

TileMap制作:Tiled

Tiles在電腦游戲中往往用來生成連續圖像列,比如地圖。在V3中,用來顯示入侵的吸血鬼和障礙物。Tiled地圖編輯器(可在 http://www.mapeditor.org/處下載)是免費的,使用Qt跨平臺庫編寫而成,可以在Windows、Linux和Mac OS X系統上運行。圖2.3顯示Tiled在tile地圖編輯期間的模樣。

Android 游戲設計教程:游戲元素和工具

圖2.3 Tiled地圖編輯器(from gamecareergudie)

TrueType字體制作和編輯:FontStruct

Android支持使用TrueType字體,我們在游戲中使用的就是這種字體。現在有許多工具可以用來制作和編輯TrueType字體,當然還可 以使用許多其他的字體(游戲邦注:有些字體是免費的,有些字體需要購買)。很顯然,FontShop制作的基于網絡的FontStruct是個不錯的工 具,你可以在開放社區中分享你已經制作出的字體。字體可以下載,每種字體都有其相關授權。

自行制作字體需要大量的工作。我不推薦這么做,除非你實在找不到適合的字體或者你喜歡制作字體。圖2.4為FontStructor網站窗口,你可以在這里制作和編輯字體。

Android 游戲設計教程:游戲元素和工具

圖2.4 FontStruct字體編輯器(from gamecareergudie)

音頻工具

V3游戲包含兩種類型的音頻資產,我們需要工具來制作和編輯這兩種音頻。音效指持續時間較短的聲音(游戲邦注:最多5秒,通常情況下少于3秒),隨游戲中某些事件的發生而播放。音樂是持續時間較長的聲音,通常在場景呈現時作為背景播放。

音效:Audacity

如果游戲沒有音效會怎么樣呢?你想要為自己的游戲制作令人驚奇的音效,Audacity(網址為 http://audacity.sourceforge.net/)是個世界級的音效編輯工具,可免費在Windows、Mac OS X和Linux系統上運行。Audacity支持開發者可以輸入或捕捉音效文件,編輯文件并將它們輸出成各種不同的音頻格式。Android偏好AAC、 MP3、MIDI、Ogg Vorbis和WAV文件,這些格式的文件都可以用Audacity來處理。圖2.5顯示Audacity正在編輯音效。

Android 游戲設計教程:游戲元素和工具

圖2.5 Audacity聲音編輯器(from gamecareergudie)

背景音樂:MuseScore

你的游戲還需要背景音樂,格式可以是MP3、OGG或MIDI文件。當然,你可以用許多種方法來制作所需的音樂。比如,你或許有足夠的才能自行用樂器彈奏出音樂,然后用設備錄下。或者,你可以在網絡上尋找可免費用于商業化用途的音樂文件。

我的音樂才能有限,所以我選擇使用開源音樂制作工具MuseScore(網址為http://www.musescore.org/)來為V3游戲 制作音樂。這個軟件讓你可以使用電腦鍵盤或配套的MIDI鍵盤來制作或編輯音樂。圖2.6顯示正在編輯音樂片段的MuseScore主界面。

Android 游戲設計教程:游戲元素和工具

圖2.6 MuseScore(from gamecareerguide)

完成音樂制作后,使用MuseScore可以將音樂保存為MIDI、MP3、OGG或WAV文件,這些格式都能為Android所識別。

實踐:開場畫面

我們花了這么長的篇幅來闡述游戲概念和工具,現在是時候開始編寫代碼,進入開發循環。我們采用的模型是,先在這里創建某Android項目的基礎,然后在以下章節中不斷添加新內容,直至形成完整的游戲。

我們先來看看該程序的開場畫面(如圖2.7所示)。屏幕在顯示這個畫面5秒鐘后轉變成空白屏幕。

Android 游戲設計教程:游戲元素和工具

圖2.7 V3游戲中的啟動畫面(from gamecareerguide)

創建游戲項目

在本書中,我們使用的是Android SDK。要使用SDK來制作V3游戲,我們先要創建一個新的Android項目。“新建”——“Android項目”對話框需要你輸入下列信息:

1、項目名稱:V3

2、選擇“在工作區創建新項目”

3、選擇默認的工作區存儲位置(游戲邦注:設計師亦可根據自己的需要變更存儲位置)

實踐:開場畫面27

4、在Build Target中選擇“Android 1.6”

5、應用名稱:V3

6、安裝包名稱:com.pearson.lagp.v3

7、Create Activity:StartActivity

8、Min SDK Version:4

通過這些步驟就可以為范例游戲創建新項目,項目包括StartActivity,不過現在它的內容只是簡單的“Hello, World”。在本章節后面的版塊中,我們將在開始添加代碼時修改它的內容。

添加AndEngine庫

如果你還未從AndEngine網站下載AndEngine庫,先完成這個步驟。獲得AndEngine的.jar文件的最佳地方是谷歌上的 AndEngineExamples庫,網址為http://code.google.com/p/andengineexamples/。

在源代碼標簽下,你可以在庫文件夾中瀏覽查找.jar文件,也可以直接將整個樹形源代碼克隆至本地計算機。推薦使用第2種方法,這樣你就已經為訪問 范例代碼做好準備。AndEngine使用Mercurial源代碼控制系統。如果你還未安裝Mercurial,網站上的指導會告訴你如何實現。你 將.jar文件添加到機器上之后,接下來就需要輸入源代碼:

1、在Eclipse Package Explorer中,擴展V3項目。右鍵點擊V3項目,選擇“新建文件夾”,在對話框中輸入相關信息,這樣便創建了庫文件夾。

2、右鍵點擊庫文件夾,從彈出菜單中選擇“輸入…”

3、在下個對話框中選擇“常規”——“文件系統”,使用“瀏覽”按鈕導向你已下載的AndEngine .jar文件的存放地址。點擊地址名稱。

4、現在,輸入對話框顯示的應當是復選框無內容的地址。右側窗口顯示地址中的文件,應該有andengine.jar。點擊文件名旁邊的復選框,然后點擊“完成”。

5、要將.jar文件包含在你的構建路徑中,可以在Eclipse Project Explorer窗口中右鍵點擊.jar文件,然后選擇“構建路徑”——“添加至構建路徑”。這樣,.jar文件也會直接顯示在項目文件夾下。

添加開場畫面代碼

我們需要修改自動生成的StartActivity.java文件,這樣才能在游戲組件加載時呈現開場畫面。最終,在所有內容加載完畢之后,我們要 讓畫面跳轉到游戲菜單上。但現在,我們要實現的是保持開場畫面一直可見,直到用戶回到主界面。列表2.1就是StartActivity.java修改后 的版本。

列表2.1 StartActivity.java


package com.pearson.lagp.v3;

import org.anddev.andengine.engine.Engine;

import org.anddev.andengine.engine.camera.Camera;

import org.anddev.andengine.engine.options.EngineOptions;

import org.anddev.andengine.engine.options.EngineOptions.

ScreenOrientation;

import org.anddev.andengine.engine.options.resolutionpolicy.

RatioResolutionPolicy;

import org.anddev.andengine.entity.scene.Scene;

import org.anddev.andengine.entity.sprite.Sprite;

import org.anddev.andengine.entity.util.FPSLogger;

import org.anddev.andengine.opengl.texture.Texture;

import org.anddev.andengine.opengl.texture.TextureOptions;

import org.anddev.andengine.opengl.texture.region.TextureRegion;

import org.anddev.andengine.opengl.texture.region.TextureRegionFactory;

import org.anddev.andengine.ui.activity.BaseGameActivity;

public class StartActivity extends BaseGameActivity {
// ===========================================================
// Constants
// ===========================================================
private static final int CAMERA_WIDTH = 480;
private static final int CAMERA_HEIGHT = 320;
// ===========================================================
// Fields
// ===========================================================
private Camera mCamera;
private Texture mTexture;
private TextureRegion mSplashTextureRegion;
// ===========================================================
// Methods for/from SuperClass/Interfaces
// ===========================================================
@Override
public Engine onLoadEngine() {
this.mCamera = new Camera(0, 0, CAMERA_WIDTH,
CAMERA_HEIGHT);
return new Engine(new EngineOptions(true,
ScreenOrientation.LANDSCAPE,
new RatioResolutionPolicy(CAMERA_WIDTH,
CAMERA_HEIGHT),
this.mCamera));
}
@Override
public void onLoadResources() {
this.mTexture = new Texture(512, 512,
TextureOptions.BILINEAR_PREMULTIPLYALPHA);
this.mSplashTextureRegion = TextureRegionFactory
.createFromAsset(this.mTexture,
this, “gfx/Splashscreen.png”, 0, 0);
this.mEngine.getTextureManager().loadTexture(this.mTexture);
}
@Override
public Scene onLoadScene() {
this.mEngine.registerUpdateHandler(new FPSLogger());
final Scene scene = new Scene(1);
/* Center the splash on the camera. */
final int centerX =
(CAMERA_WIDTH – this.mSplashTextureRegion.getWidth()) / 2;
final int centerY =
(CAMERA_HEIGHT -
this.mSplashTextureRegion.getHeight()) / 2;
/* Create the sprite and add it to the scene. */
final Sprite splash = new Sprite(centerX,
centerY, this.mSplashTextureRegion);
scene.getLastChild().attachChild(splash);
return scene;
}
@Override
public void onLoadComplete() {
}
}

這樣看上去代碼似乎很多,但是在AndEngine中,開場畫面只是普通的精靈。因而,我們在上述代碼中實現的只是對整款游戲的初始化。下面,讓我們解析代碼的各個部分:

1、在輸入完成后,我們的類就成為BaseGameActivity的子集。這種類可以實現所有的一般AndEngine初始化,為我們提供些許隨后將會用到的方法。

2、隨后,我們設定了鏡頭視圖的尺寸。因為這是個開場畫面,所以我們希望它能夠占有整個屏幕。開場畫面圖片Splashscreen.png的像素大小為480×320,與默認Android顯示尺寸相一致。

3、接下來,我們確定了鏡頭領域、我們將要使用的質感和質感區域。

4、現在,我們從超類BaseGameActivity處重寫3個方法。每個方法對應加載過程中的一個點:

(1)onLoadEngine()方法在為這種活動加載游戲引擎時調用。我們在此處初始化鏡頭和引擎。關于引擎的初始化,有兩點需要注意。首先, 我們設定屏幕方向為橫向。多數手機游戲使用的都是橫向屏幕。其次,我們請求稱為“RatioResolutionPolicy”的分辨率協議。在這個協議 下,引擎會通過縮放功能自行調整適應不同的屏幕幾何尺寸,同時保持畫面縱橫比不變。

(2)onLoadResources()方法在加載所需資源時調用。在上述代碼中,我們創建了我們將要使用的紋理,并從開場動畫圖片 Splashscreen.png處加載這種紋理。這個文件應當位于我們的項目工作區中名為“assets/gfx”的文件夾中,否則應用就無法運行。現 在還無需擔心TextureOptions設置,我們將在第5章的繪圖和精靈中進行更細節化的闡述。最后,我們將紋理加載入引擎的 TextureManager中。

(3)onLoadScene()方法在引擎準備呈現場景時調用。我們初始化每秒幀數記錄器,創建場景,將鏡頭置于場景中,為開場畫面制作精靈,將 其依附在場景上,然后將結果反饋給引擎。AndEngine提供為開場畫面提供了一種較為特別的場景(即SplashScene),但我們的這種方法也可 以實現目標。

填寫完StartActivity.java所需的代碼后,我們需要導入圖像文件。這需要以下數個步驟:

1、右鍵點擊Project Explorer中V3項目下的資產文件夾。選擇“新建”——“文件夾”,創建子文件夾gfx。

2、右鍵點擊新建子文件夾gfx,導入文件Splashscreen.png。將這個圖片放入資產文件夾中,使得我們可以使用create-FromAsset()方法來將其加載進紋理中。

在模擬器中運行游戲

在Android模擬器中運行游戲很簡單,選擇“運行”——“從Eclipse菜單運行”即可。如果你想要立即選擇AVD,可以這么做,隨后你應當 可以看到開場畫面呈現在模擬器窗口中。如果你需要旋轉模擬器至橫向,按Ctrl+F12這個鍵位組合即可。如果應用在強制關閉時崩潰,你可能會失去某些所 需的資產。LogCat會告訴你哪些資產已丟失。

在Android設備上運行游戲

你需要訪問設備制造商的開發者網站,查看Android開發工作的相關信息。只需要確保設備上運行的Android版本至少同你在創建項目時選擇的版本號(游戲邦注:范例中選擇的是等級4的API,相當于Android 1.6)一樣新。

現在,當你選擇“運行”——“從Eclipse菜單運行”時,應當可以看到在設備上運行的選項。Android SDK將會在設備上安裝應用,隨后開始運行該應用。我們可以使用后退或Home鍵返回主菜單,但是同所有的Android應用一樣,你的游戲將繼續在后臺 運行。Android智能設備不會顯示游戲運行畫面,雖然設備不會耗費內存周期來更新不可見的屏幕畫面,但游戲的運行仍需要消耗些許內存周期。要停止或卸 載應用,使用設備上的“設置”——“應用程序”——“管理應用程序”功能即可。

總結

本章涵蓋了諸多內容。我們淺析了Android SDK,介紹了Android和游戲組件:鏡頭;場景;層次;精靈;實體;修改器;紋理;質感區域;引擎;BaseGameActivity;物理連接器。

我們介紹了許多可以用來生成手機游戲組件的工具,包括:Inkscape:用于可縮放矢量圖像;GIMP:用于位圖圖像;AnimGet:用于動畫捕捉;Tiled:用于編輯tile地圖;Audacity:用于音頻編輯;MuseScore:用于制作音樂。

最后,我們開始制作V3游戲。我們使用Android SDK Wizard創建Android項目,添加AndEngine庫,添加代碼恰當地執行AndEngine初始化,為游戲制作出開場畫面。

轉載自:游戲邦,原文鏈接

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!