首先,這是壹本關於編程的書。(也許妳會說:“編程書到處都是!”)
確切地說,這是壹本關於遊戲編程的書。(也許妳會說:“遊戲編程書有什麽稀罕?”)
更準確地講,這是壹本關於Android遊戲編程的書。(也許妳會說:“如今,Android遊戲編程書也不算少了!”)
最重要的是,這是壹本能夠幫助妳將PC上龐大精美的3D遊戲輕松移植到Android平臺的編程書。(也許妳會說:“……哦?那倒可以試試!”)
沒錯,這正是本書最引人註目的地方。不同於壹般的Android遊戲編程書,它沒有詳盡介紹在這個平臺上開發遊戲的方方面面,而是找到了壹個獨特的著眼點,讓妳切實領會如何“事半功倍”地完成Android遊戲開發。
也許妳從未想過Wolfenstein 3D和Doom之類的遊戲也能在Android上流暢運轉,不過這個看似艱巨的任務已經被作者輕松完成,而且他會把他的這壹獨門絕技悉心傳授給妳,妳手上的這本書正是傳說中的“葵花寶典”。
本書還有壹大特點:說得少,做得多。它總是開門見山地切入主題,指明方法,然後完全通過實例講解如何具體應用,並有針對性地強調如何解決應用過程中存在的問題。這壹點應該很受壹線編程人員歡迎。
妳應該已經躍躍欲試了,那麽現在就開始,去了解書中的奧秘,掌握作者傳授的秘技,享受Android遊戲開發的樂趣吧!
全書主要由王恒、蘇金國翻譯,並得到王小振、李璜、劉亮、王少軒、謝連寶的大力協助。若譯文有不當之處,敬請讀者批評指正。
前言
本書將幫助妳為Android平臺創建最棒的遊戲。現在討論這個主題的書有很多,不過本書會從壹個獨特的視角,展示如何不費吹灰之力就將本地PC遊戲輕松地移植到Android平臺上。為此,書中采用了我們耳熟能詳的真實例子,而且每壹章都提供了大量源代碼。要記住,深入學習本書之前,首先要有Java 和ANSI C的堅實基礎。我會盡我所能用清晰、簡單的方式,結合圖形和示例代碼來解釋這些最為復雜的概念。每壹章提供的源代碼都可以幫助妳深入理解概念,作為移動遊戲開發人員,妳還可以充分利用這些源代碼來節省開發時間。
需要什麽軟件
為了能夠充分利用本書,需要以下工具。
已正確安裝Java SDK的Windows或Linux PC
我想這是顯而易見的,因為大多數Android開發都用Java完成。要註意,我所說的是Java SDK,而不是JRE。由於後面各章會用到JNI頭文件和命令行工具,所以SDK是必不可少的。
Eclipse IDE 和Android SDK
Eclipse是Android開發領域事實上的標準IDE。我使用了Eclipse Galileo來創建本書所有示例的工作區,當然,使用Eclipse Ganymede也完全可以。. 本書獨特之處
我認為有壹點非常重要,那就是要讓讀者理解本書的寫作目標與眾不同。盡管Java是Android的主要開發語言,但Google意識到,作為壹個遊戲平臺,Android要想取得成功,非常需要混合Java/C開發,正因如此,他們發布了NDK。Google逐漸認識到,為其他移動平臺(如iPhone)編寫的本地遊戲非常之多,Android需要支持C開發才能迎頭趕上。PC遊戲已經有幾十年的發展歷程(主要用C編寫),只需使用壹個簡單的ARM C 編譯器,就可以把幾千個PC遊戲移植到Android平臺。正是這壹點讓本書獨具壹格。既然可以采用壹種優雅的方式簡單地結合這兩種語言,從而大量節省時間和金錢,為什麽還要費力勞神地把10萬行復雜的C代碼轉換成Java代碼呢?利用這本書,妳將掌握如何有效地結合這兩種語言。這就是我的目標,也正是這壹點,才讓本書從眾多相關圖書中脫穎而出。另壹方面,本書還包括介紹純Java遊戲的章節,通過合理均衡地分配各部分內容,希望能同時滿足Java追隨者和C愛好者的需要。
Android SDK兼容性
作為壹個開發人員,妳可能想明確本書中代碼的SDK兼容性。這是壹個重要的問題,因為Android SDK 的版本頻繁更新。寫本書時,Google剛剛發布了Android SDK 2.0版本。書中的代碼已經用以下版本的Android SDK做過測試:
SDK 2.0
SDK 1.6
SDK 1.5
SDK 1.0
總之,本書中的代碼在1.0到2.0的所有SDK版本中都可以順利運行,這也是我壹直以來的目標。 本書中對純Java 遊戲和混合遊戲的內容做了合理的劃分,安排如下:
第1章
作為第壹步,這壹章首先建立壹個Linux系統,完成混合遊戲編譯,包括獲取Android源文件、提取設備系統庫、建立定制編譯toolchain和定制編譯腳本。由於本書後面將要使用Eclipse IDE,這壹章還會介紹設置這個開發環境 的有關細節。.
第2章
這壹章中,通過在壹個本地庫上構建簡單的Java應用,妳將了解如何采用壹種優雅的方式結合Java 和C代碼。妳將學習關於Java本地接口(Java Native Interface ,JNI)的壹些讓人歡欣鼓舞的概念,還會了解結合Java 和C時所用的API,包括如何加載本地庫、如何使用本地關鍵字、如何生成JNI頭文件,以及方法簽名、Java數組與C數組、調用Java方法、產品編譯和打包等內容。
第3章
從這壹章開始,我們來研究純Java遊戲,首先從壹個名為Space Blaster的真實遊戲入手。這個遊戲的目標是利用手指或鍵盤讓壹個飛船飛越星空。從這壹章中,妳會了解如何構建基於XML的定制線性布局、如何使用抽象類和定時器任務來模擬簡單的遊戲循環、如何在壹個非UI線程中使視圖無效,以及如何從項目資源加載sprite和聲音,另外還會學習壹些繪制技術,如sprite動畫、簡單對象繪制以及使用Paint對象設置樣式和顏色。
第4章
第4章以經典街機遊戲Asteroids為例,繼續討論純Java遊戲。妳將學習在Android畫布上繪制多邊形sprite的所有知識。這個技術稍有些難度,因為Android API缺乏對多邊形的支持。這壹章依賴於Java語言的高度可移植性,將多邊形代碼從 J2SE API 移植到Android API,從而最終創建Asteroids。妳可能已經註意到,這是壹個主要基於多邊形的遊戲。此外,這壹章還談到另外壹些有意思的主題,包括遊戲生命周期中的步驟(即初始化、繪制和更新物理特性)、響應按鍵和觸控事件,以及在設備模擬器上測試。
第5章
這壹章討論的是利用OpenGL繪制3D圖形。這裏會展示我無意中得到的壹個絕妙技巧,利用這個技巧可以在Java和C中混合OpenGL API調用。Google 提供了壹個3D立方體示例來展示如何在純Java 和混合模式中使用OpenGL,我們就通過這個立方體示例說明這個概念。這個技巧將為Android 的3D開發開拓壹個新的領域,從而可以將大量3D PC遊戲移植到這個平臺,並且大大節省開發成本和時間。
第6章
第6章和第7章可以視為壹個系列,這也是本書中我個人最喜歡的部分。這壹章將把Wolfenstein 3D引入Android平臺——這個遊戲堪稱所有PC上的3D 射擊遊戲的“教父”。 誰能想得到,這樣壹個復雜的PC遊戲居然可以輕而易舉地移植到Android移動設備上!這壹章會介紹Java和C如何和諧***處,並介紹其他壹些主題,如基本遊戲體系結構(展示Java 和C組件如何結合),聲音、音樂、按鍵和觸控事件的資源處理器,如何使用JNI將圖形信息、視頻緩沖區和聲音/音樂請求級聯返回到Java,以及如何進行編譯和測試。
第7章
作為下壹步,第7章利用PC上的裏程碑式遊戲Doom進壹步展示有關概念。Doom是迄今為止所創建的最偉大的3D遊戲,這壹點絕對無可爭議,它為3D圖形遊戲開辟了壹個新領域。這壹章的最終目標並不是描述這個遊戲本身,而是希望妳能從中了解到:將類似Doom這麽復雜的PC遊戲移植到Android平臺是何等容易。不相信嗎?可以給妳提供壹個證據:Doom包含10萬余行C代碼,但是只需增加不到200行JNI API調用以及構建移動UI所需的Java代碼,就可以把它引入到Android!這壹章將說明,完全不必把10萬行C代碼全部轉換為Java代碼,只需要采用巧妙的方式將這兩種強大的語言完美地混合在壹個“優雅”的應用中。想想看這將節省多少開發時間和成本!壹定要好好讀壹讀這壹章。