从零开始Android游戏编程(第二版)作者:邢野时间:2009-9-25MSN:xingye(at)sohu.com目录前言.................................................................................................................3第一版前言.......................................................................................................5第一章搭建开发环境.........................................................................................6第二章创建第一个程序HelloTank....................................................................10第三章显示文字和图片...................................................................................17第四章响应用户事件.......................................................................................30第五章小结——扫雷游戏的实现......................................................................36第六章SurfaceView动画.................................................................................39第七章精灵、帧动画与碰撞检测......................................................................46第八章地图的设计和实现................................................................................62第九章游戏程序的生命周期.............................................................................75第十章游戏循环的设计...................................................................................86第十一章演员(Actor)、视口(ViewWindow),演出开始...................................88第十二章音乐与音效.......................................................................................95前言没想到重新打开这篇文档已经是一年之后了。去年三月,我停止了这一系列文章的写作。六月,离开了工作了五年的公司。作为公司的创始人和业务主管,我不能容忍它发展的如此缓慢,而合伙人却很享受这种慢节奏的生活。九月底,去了西藏,一如期待中的蓝天白云,雄伟的布达拉宫,美丽的雅鲁藏布江和轻微的高原反应。开车的刘师傅是个很懂生活的人,当他用一个急转弯将羊卓雍错推入我们眼帘的时候,每个人都惊呆了。原来照片上的颜色不是PS出来的!世界上真的有这么美丽的湖!从高原下来到成都、长沙、武汉。回到了久违的母校,见到了阔别多年的队长和同学。才发现不光是高原的美景能让人震撼,久别的重逢一样能冲击人的心灵。当那些青春的记忆一瞬间被撩起,不知是不是温暖,不知是不是凄凉。人,也笑了,酒,也醉了。“南巡”归来,心中一下少了很多杂念,或许是江山如画让人更觉人生苦短吧。既然自己对移动开发这么感兴趣,何不干脆寄情于此,忘掉什么web,忘掉什么ERP。于是iPad,MacBook摆上了书桌,多年不用的C语言重新捡起。arm、toolchain、xcode、跨平台、交叉编译。陌生,熟悉,可憎,可爱。突然发现,原来自己还是喜欢学习,一把年纪了,还能觉得吸收知识是一个快乐的过程。过程虽然曲折,前途却有光明。看到同一个程序在windows,mac,ios,android都可以运行的时候,自己都有点“马德里不思议”的感觉。两个来月的学习、尝试终于有所收获。恰在这时,又一封关于这一教程的邮件出现在了我的邮箱。如同前面所有的邮件一样,xiangyang也想知道这个系列教程还有没有续集。很遗憾,它没有。自从我下定决心制作一个跨平台的框架之后,就放弃了对javaSDK的探索。我喜欢java的干净快捷,但是我想更集中精力。当取得了阶段性成果之后,我很想让自己紧绷的神经放松一下。于是我对xiangyang说“用一周的时间完成这个教程,以减少读者的遗憾”,这也就是大家在后面将看到的。一些变化:从现在开始,不再使用OPhoneSDK。Google的新工具非常好,可以管理多个SDK版本,使用起来非常方便。而相比之下,OPhone老湿就太不给力了,还在吃Cupcake吧,别吃了,再吃噎到了。另外,我重新整理了随书源码。让大家使用起来更方便。最后,很多人希望我能有个blog以方便交流,所以本文将通过我的csdn博客重新发布。其实我以前在javaeye上发过,可没想到javaeye上竟然有那么多脑残,看到OPhone就像看到他母亲的裸照一样不能容忍,纷纷想拿五毛钱买回去珍藏!?你瞧不起它并不代表你就比它优秀,真的。邢野2011-1-10=9077643779第一版前言什么是OPhoneOPhone是基于Linux、面向移动互联网的终端基础软件及系统解决方案。OPhoneSDK是专为OPhone平台设计的软件开发套件,它包括OPhoneAPI,OPhone模拟器,开发工具,示例代码和帮助文档(摘自OPhone官方网站:)。简而言之,OPhone是一个移动终端的操作系统,移动终端包括手机、MID、NetBook等等。与其他领域的编程一样,OPhone编程并没有什么神秘之处,只需简单的学习就可以掌握大部分的概念。剩下的就是尽情发挥你的想象力了。写作本文的目的为了普及OPhone编程的基本知识,并通过复刻一个坦克大战游戏让读者了解2D游戏编程的简单思路。文中的程序结构和实现方法并非最优,希望能起到一个抛砖引玉的作用,让更多的人加入到OPhone开发的行列中来。谁适合阅读本文虽然本文叫做“从零开始OPhone编程”,但并不能面对那些对编程一无所知的读者。实际上,本文要求读者了解java语言的基本知识,最好会使用eclipse。在文章的每个章节都标有难度,有能力的读者完全可以跳过相对容易的章节直接阅读自己感兴趣的内容。本文的时效性本文只适合当前版本的OPhoneSDK(v1.0),本文的代码、图片、链接可能会因时间推移而失效。第一章搭建开发环境难度:容易工欲善其技,必先利其器。我们要做的第一件事就是搭建Android开发环境。本文只介绍Windows下的安装方法,Linux下的安装方法请参考官方网站的介绍。与PC编程略有不同的是,Android的程序需要在模拟器中运行。因此,我们需要一个集成开发环境,一个SDK和一个模拟器。因为Android编程使用java语言,所以我们还需要JDK,最好使用安装版本()选用JDK6Update16Windows版即可。集成开发环境我们选用eclipse,可以使用eclipse3.3到3.5的任意版本()最好下载JDT集成版。然后我们可以从Android官方网站()下载AndroidSDK(当然,如果你不能翻墙,可以到国内的网站下载),SDK全部安装完毕之后,还需要安装eclipse插件。插件是用来扩展eclipse功能的。开发Android用的插件叫ADT(AndroidDeveloperTools),它可以帮助我们完成创建项目,向模拟器部署并运行程序,调试程序等工作。关于ADT的功能,在后面使用中我们会逐渐熟悉。安装ADT的方法如下(以eclipse3.4为例):启动eclipse,选择菜单中的Help-SoftwareUpdates点击AddSite点击Archive…找到OPhoneSDK安装目录下tools\ophone\ADT-0.8.0.zip(因为我已经安装好了ADT,所以出现了重复URL的提示),点击OK即可开始安装ADT安装完毕后还要简单配置一下,打开菜单中的Window-Preferences找到Android项,通过Browse按钮指定AndroidSDK的安装位置至此为止,Android的安装环境就全部搭建完毕了。下一章节,我们会遇见经典的helloworld,下章见!第二章创建第一个程序HelloTank难度:容易现在开始,我们要真正写作Android程序了。虽然前面安装过程那么复杂,但是写起程序来却是非常简单。而且为了让大家有一个直观的认识,本文不会叙述大段的原理,而是在编码的过程中渗透对原理、概念的讲解。让我们打开eclipse,选择菜单中的File-New-Project…选择Android-AndroidProject下面需要我们输入项目的一些信息,因为我们要复刻经典游戏坦克大战,所以我们的程序就取名Tank这样,一个Android项目就创建完成了,我们可以在eclipse的PackageExplorer看到我们的项目托ADT的福,虽然我们只输入了几个名字,但这个项目实际上已经可以运行了。右击项目名,选择RunAs-AndroidApplication不出意外的话,你会看到一个手机模拟器被启动,而我们刚刚建立的程序会被运行起来如果你发现模拟器启动了,而程序并没有被运行,可能需要手工启动程序。这里我们用到一个重要的工具DDMS(DavlikDebugManager)。运行DDMS快捷方法是点击eclipse右上角的OpenPerspective,如果在弹出的列表中没有DDMS,那么点击Others选择DDMS这样我们就打开了DDMS界面,这个工具我们以后会经常用到。刚刚说到模拟器启动了而程序并没有被运行,很可能是在模拟器启动过程中DDMS失去了与模拟器的链接。解决方法很简单:点击Devices标签下的工具栏,选择Resetadb然后右击项目名称,RunAs-AndroidApplication。除了右击运行项目,还可以通过工具栏上的运行按钮启动程序在运行按钮左边的是Debug按钮,这两个我们以后也会经常用到。现在我们已经有了第一个可以运行的Android,虽然你可能对ADT生成的一堆文件感到一头雾水,也不知道程序界面上那一句“HelloWorld,Main”是从哪里来的,但是没关系,随着本文的深入你会逐渐熟悉Android项目的目录结构,程序设计的原则和方法,以及调试和部署的方法。现在读者可以自己熟悉一下模拟器的操作,让我们下章再见。第三章显示文字和图片难度:容易从本章开始,读者就要编写代码了。按照作者的原则——少一些理论,多一些实践,代码中可能会有跳跃的地方。但是请大家不要着急,随着学习的深入,你很快就会了解其中的