译者序精通安卓游戏开发
确切的说,这是一本关于游戏编程的书。也许你会说:“游戏编程书有什么稀罕的?”)
更准确的说,这是一本关于安卓游戏编程的书。(也许你会说:“现在的安卓游戏编程书不在少数!”)
最重要的是,这是一本可以帮助你轻松将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平台上。正是这一点使这本书与众不同。既然我们可以简单地以优雅的方式将这两种语言结合起来,从而节省大量的时间和金钱,为什么还要费心将654.38+万行复杂的C代码转换成Java代码呢?通过这本书,你将掌握如何有效地结合这两种语言。这是我的目标,也正是这一点让这本书在众多相关书籍中脱颖而出。另一方面,这本书也包含了纯Java游戏的章节。通过合理平均分配各部分内容,希望能同时满足Java追随者和C爱好者的需求。
Android SDK兼容性
作为一名开发人员,你可能想清楚本书中代码的SDK兼容性。这是一个重要的问题,因为Android SDK的版本经常更新。在撰写本书时,谷歌刚刚发布了Android SDK 2.0的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源文件、提取设备系统库、建立定制编译工具链和定制编译脚本。因为Eclipse IDE将在本书的后面使用,所以本章也将介绍设置这个开发环境的细节。。
第二章
在本章中,你将学习如何通过在本地库上构建一个简单的Java应用程序来优雅地结合Java和C代码。你会学到一些关于Java原生接口(JNI)的激动人心的概念,还会学到Java和C结合时使用的API,包括如何加载本地库,如何使用本地关键字,如何生成JNI头文件,以及方法签名,Java数组和C数组,调用Java方法,产品编译和打包。
第三章
从本章开始,我们来研究纯Java游戏,从一款名为Space Blaster的真实游戏开始。这个游戏的目标是用你的手指或键盘让一艘宇宙飞船飞过星星。从本章开始,你将学习如何基于XML构建一个定制的线性布局,如何使用抽象类和定时器任务来模拟一个简单的游戏循环,如何在一个非UI线程中使视图无效,以及如何从项目资源中加载sprite和声音。此外,您还将学习一些绘图技术,如精灵动画、简单的对象绘制以及使用Paint对象来设置样式和颜色。
第四章
第4章以经典街机游戏小行星为例,继续讨论纯Java游戏。你将学习在Android画布上绘制多边形精灵。这项技术有点难度,因为Android API缺乏对多边形的支持。本章依靠Java语言的高可移植性,将多边形代码从J2SE API移植到安卓API,最终创建小行星。你可能注意到了,这是一个以多边形为主的游戏。此外,本章还谈到了其他有趣的话题,包括游戏生命周期中的步骤(即初始化、绘制和更新物理特征)、响应按键和触摸事件以及在设备模拟器上进行测试。
第五章
本章讨论使用OpenGL绘制3D图形。这里我将展示一个我偶然得到的奇妙技能,用它我可以混合Java和c中的OpenGL API调用,Google提供了一个3D cube例子来展示如何在纯Java和混合模式下使用OpenGL,我们将通过这个cube例子来说明这个概念。该技术将为Android的3D开发开辟一个新的领域,使得大量的3D PC游戏可以移植到这个平台上,大大节省开发成本和时间。
第六章
第6章和第7章可以算是一个系列,是这本书我个人最喜欢的部分。本章将把Wolfenstein 3D引入Android平台——这款游戏堪称PC上所有3D射击游戏的“教父”。谁能想到这么复杂的PC游戏竟然可以轻松移植到Android移动设备上!本章将介绍Java和C如何和谐相处,并介绍其他主题,如基本游戏架构(展示Java和C组件如何结合),声音、音乐、按键和触摸事件的资源处理器,如何使用JNI将图形信息、视频缓冲区和声音/音乐请求级联回Java,以及如何编译和测试它们。
第七章
作为下一步,第7章使用PC上的标志性游戏Doom来进一步演示相关概念。《毁灭战士》是有史以来最伟大的3D游戏,这是绝对无可争议的。它为3D图形游戏开辟了一个新的领域。本章的最终目的不是描述游戏本身,而是希望你能了解到把一个像Doom这样复杂的PC游戏移植到Android平台上是多么的容易。你不相信吗?我可以给你一个证明:Doom包含了超过654.38+百万行的C代码,但是只需要添加不到200行的JNI API调用和构建一个移动UI所需的Java代码,就可以引入Android!本章将说明,完全没有必要将所有654.38+百万行C代码转换成Java代码,而只需以巧妙的方式将这两种强大的语言完美地混合在一个“优雅”的应用程序中。想想这会节省多少开发时间和成本!请务必仔细阅读本章。