iPhone游戏开发实践指南(iOS游戏开发完全手册)(苹果开发与应用系列)[图书]

更多详情

内容简介: 《iPhone游戏开发实践指南》通过一个实例介绍了在iPhone上创建游戏的完整过程,全面涵盖从最初的游戏设计到最终将游戏上传至App Store的整个过程。全书共分16章,每一章都详细介绍了该游戏的一个特定组件及支持该组件的技术,包括最初的游戏设计思路、之前的准备工作、游戏循环、图像渲染、精灵表、动画、点阵字、贴图地图、粒子发射器、声音、用户输入、游戏界面、游戏对象和实体、碰撞检测,以及如何对游戏进行测试等。
《iPhone游戏开发实践指南》适合iPhone游戏开发人员阅读。

目录: 《iPhone游戏开发实践指南》
对本书的赞誉
译者序
前言
第1章 游戏设计1
1.1 游戏的开始2
1.2 主导思想3
1.2.1 适合iPhone的游戏3
1.2.2 故事情节4
1.2.3 名字的内涵4
1.2.4 游戏的目标5
1.3 游戏的元素5
1.3.1 时间6
1.3.2 生命6
1.3.3 健康值6
1.3.4 物品7
1.3.5 羊皮碎片7
1.3.6 门8
1.3.7 武器8
1.3.8 实体8
1.3.9 玩家9
1.4 小结9
第2章 术语、技术和工具10
2.1 术语10
2.1.1 精灵11
2.1.2 精灵表12
2.1.3 动画14
2.1.4 点阵字15
2.1.5 贴图地图16
2.1.6 粒子系统16
2.2 碰撞检测18
2.2.1 人工智能18
2.2.2 游戏循环19
2.3 技术21
2.3.1 Objective-C21
2.3.2 Cocoa Touch21
2.3.3 OpenGL ES22
2.3.4 OpenAL24
2.4 工具25
2.5 小结30
第3章 开始探索旅程32
3.1 在Xcode中创建项目32
3.2 程序的运行34
3.3 准备就绪34
3.4 程序代理35
3.4.1 查看头文件36
3.4.2 查看实现文件37
3.5 EAGLView40
3.5.1 EAGLView.h40
3.5.2 EAGLView.m41
3.6 ES1Renderer48
3.6.1 审查ES1Renderer.h48
3.6.2 查看ES1Renderer.m49
3.6.3 创建帧缓冲区和渲染缓冲区50
3.6.4 render方法52
3.6.5 定义颜色值54
3.6.6 定位55
3.7 OpenGL的工作原理56
3.7.1 对模型应用变换56
3.7.2 在屏幕上渲染57
3.8 小结59
第4章 游戏循环61
4.1 时间控制就是一切61
4.2 冲突检测62
4.3 游戏循环62
4.3.1 基于帧的循环体63
4.3.2 基于时间的固定间隔循环体64
4.4 开始65
4.4.1 EAGLView类的修改65
4.4.2 EAGLView.m文件的修改66
4.4.3 ES1Renderer类68
4.4.4 配置视图端口71
4.5 游戏场景和游戏控制器72
4.5.1 创建游戏控制器72
4.5.2 GameController类72
4.5.3 创建单态类74
4.5.4 GameController.m文件内部74
4.5.5 AbstractScene类76
4.5.6 GameScene类77
4.6 小结79
4.7 练习79
第5章 图像渲染81
5.1 渲染入门81
5.2 四边形的渲染82
5.3 纹理映射84
5.4 交错顶点数组86
5.5 结构体88
5.6 图像渲染类89
5.6.1 Texture2D类89
5.6.2 TextureManager类96
5.6.3 ImageRenderManager类98
5.7 Image类104
5.7.1 初始化105
5.7.2 获取子图像107
5.7.3 复制图像108
5.7.4 渲染图像108
5.7.5 getter和setter111
5.8 小结112
5.9 练习112
第6章 精灵表113
6.1 精灵表简介113
6.1.1 简单精灵表113
6.1.2 复杂精灵表114
6.2 使用Zwoptex116
6.3 SpriteSheet类117
6.3.1 初始化117
6.3.2 提取精灵120
6.4 PackedSpriteSheet类121
6.4.1 初始化121
6.4.2 解析控制文件122
6.4.3 提取精灵123
6.5 小结123
6.6 练习124
第7章 动画125
7.1 动画篇的项目125
7.2 动画简介125
7.2.1 帧126
7.2.2 状态126
7.2.3 类型126
7.2.4 方向126
7.2.5 跳动帧126
7.3 Animation类127
7.3.1 初始化127
7.3.2 添加帧128
7.3.3 更新动画128
7.3.4 渲染动画130
7.3.5 完成131
7.4 小结133
7.5 练习133
第8章 点阵字134
8.1 点阵字项目134
8.2 点阵字简介134
8.3 创建点阵字精灵表135
8.4 BitmapFont类137
8.5 与C语言的关系138
8.5.1 初始化方法138
8.5.2 解析控制文件139
8.6 渲染文本142
8.6.1 渲染合理的文本143
8.6.2 文本宽度和高度145
8.6.3 重新分配146
8.7 小结146
8.8 练习147
第9章 贴图地图148
9.1 贴图地图入门148
9.2 贴图地图简介148
9.3 贴图地图编辑器150
9.3.1 贴图调色板151
9.3.2 图层151
9.4 创建贴图地图152
9.4.1 新建一个贴图集合152
9.4.2 创建地图图层153
9.4.3 创建对象图层154
9.4.4 绘制地图154
9.4.5 放置对象154
9.5 认识Tiled配置文件155
9.5.1 map元素155
9.5.2 tileset元素155
9.5.3 layer元素156
9.5.4 objectgroup元素157
9.6 地图类157
9.6.1 Layer类158
9.6.2 TileSet类162
9.6.3 TiledMap类163
9.6.4 初始化165
9.6.5 解析地图文件166
9.6.6 创建图层图像174
9.6.7 图层渲染175
9.6.8 获取贴图信息177
9.7 小结178
9.8 练习178
第10章 粒子发射器179
10.1 粒子发射项目179
10.1.1 粒子系统简介180
10.1.2 粒子系统参数181
10.2 粒子的生命周期182
10.2.1  粒子的诞生182
10.2.2 粒子生存183
10.2.3 粒子消亡183
10.2.4 粒子重生184
10.3 粒子发射器的配置184
10.4 粒子发射器类185
10.4.1 TBXMLParticleAdditions类185
10.4.2 ParticleEmitter类187
10.5 开始游戏198
10.6 小结199
第11章 声音200
11.1 声音项目200
11.2 iPhone的声音简介200
11.2.1 音频会话200
11.2.2 播放音乐202
11.2.3 播放音效202
11.2.4 创建音效204
11.2.5 立体声与单声道205
11.3 声音管理器类205
11.4 音效管理219
11.4.1 载入音效220
11.4.2 播放音效223
11.4.3 停止播放音效225
11.4.4 设置音效和监听器位置226
11.5 处理声音播放干扰227
11.6 小结228
第12章 用户输入230
12.1 用户输入项目230
12.2 用户输入简介 231
12.3 处理触控事件232
12.3.1 touchesBegan阶段234
12.3.2 touchesMoved阶段235
12.3.3 touchesEnded阶段236
12.4 处理敲击237
12.5 加速器事件238
12.6 小结240
第13章 游戏界面241
13.1 游戏界面项目241
13.2 OpenGL ES界面242
13.2.1 界面渲染242
13.2.2 按钮边界定义245
13.2.3 点击处理245
13.2.4 可视化边界246
13.2.5 转换处理248
13.2.6 OpenGL ES定向249
13.3 UIKit界面251
13.3.1 创建界面252
13.3.2 界面连接254
13.3.3 UIKit定向257
13.3.4 显示或隐藏UIKit界面259
13.4 小结261
第14章 游戏对象和实体262
14.1 游戏对象和实体项目262
14.2 游戏对象263
14.2.1 AbstractObject类263
14.2.2 EnergyObject类265
14.3 游戏实体272
14.3.1 AbstractEntity类273
14.3.2 人工智能275
14.3.3 Player实体类276
14.4 保存游戏对象或实体284
14.5 小结286
第15章 碰撞检测287
15.1 碰撞检测简介287
15.2 基于帧与基于时间289
15.3 轴对齐边界框289
15.4 检测碰撞290
15.5 碰撞地图291
15.6 实体与地图间的碰撞检测293
15.7 实体与实体间的碰撞检测294
15.8 小结296
第16章 组装起来297
16.1 摄像机297
16.2 保存游戏状态和设置299
16.2.1 保存游戏状态299
16.2.2 载入游戏状态300
16.2.3 保存游戏设置302
16.2.4 载入游戏设置303
16.3 保存高分304
16.3.1 添加分数306
16.3.2 保存高分307
16.3.3 载入高分307
16.4 性能和测试308
16.4.1 使用仪表309
16.4.2 Leaks仪表310
16.4.3 使用OpenGL ES仪表312
16.4.4 用Thumb编译314
16.5 β测试314
16.5.1 多种设备类型315
16.5.2 反馈316
16.6 小结316

译者序: 苹果公司的iPod、iPhone、iPad以及Mac现在已经成为市场焦点,越来越多的人购买了这些产品。2008年苹果公司发布了针对iOS的SDK。而Appstore已经有超过25万个应用程序,每天都有更多的程序开发人员加入到这个流行趋势中来,为iPhone等产品开发更多的应用程序。与此同时,针对iOS应用开发的书籍也如雨后春笋般冒了出来。
目前在市场上可以看到很多关于iOS应用开发的书籍,包括商务、教育和娱乐等各方面的开发知识的讲解,其中大部分图书都来自于国外优秀的程序开发人员,但是在众多书籍中,由资深程序开发者Michael Daley撰写的《iPhone游戏开发实践指南》显得尤为突出。
正像作者本人Michael Daley提过的一样,他在编写《iPhone游戏开发实践指南》之前曾查阅过大量书籍,试图找到一本适合学习iOS游戏编程的书籍,但他发现虽然那些书都提供了很多详细的信息和丰富的小例子,却并不能帮助读者开发一个完整的足以发布的游戏。正因如此,Michael开始了自己的写书历程。
本书以作者已经在App Store上发布的游戏Sir Lamorak's Quest: The Spell of Release为主线,涵盖了从游戏的设计、图像的渲染、贴图地图、粒子系统、音乐、用户输入、游戏界面和碰撞检测等各个方面的知识,带领读者从零开始,一步一步学习iOS游戏编程。从小组件的实现到将整个游戏整合起来,读者不仅能从细部上学到编写iOS游戏所需的全部内容,还能从宏观上掌握整个游戏开发的全过程,是菜鸟级开发人员和资深开发人员的必备资料。
正因如此,我们组织翻译了本书。目的就是让更多的开发人员学习并投入到iOS游戏编程这个大领域中来,并获得乐趣。如作者在书中所说,即使我们不是游戏编程的大牛,也可以坐在家里编写游戏。
在本书的翻译过程中,王杉、胥大坤、贾旭和我一起承担了主要的翻译工作,感谢郝杰和张皓琳等参与本书的翻译,感谢王命达和李广鹏对本书部分章节的校验,感谢杜强对本书的翻译工作提出的宝贵的建设性意见。由于时间仓促,本书在翻译过程可能存在一些问题,欢迎读者批评指正,可通过aaron_boy_2008@sohu.com与译者联系。
张铮
2011年6月

前言: 编写游戏不是一项轻松的任务,即使你是个经验丰富的程序员,游戏的设计模式、术语和思考过程看上去也会有点奇怪和不合常规。由于我的大部分工作时间都投入到了创建商业应用程序上,因此编写游戏只能算是一项业余爱好,这些年来我的孩子们享受着玩我编写的游戏的乐趣。随着iPod touch和iPhone的发布,我觉得是时候将我的一款游戏公布于世了。
我的首要任务是找一本开发iPhone游戏方面的优秀书籍。经过大量搜寻,我认为我想找的书并不存在。由于从我写的大量在线教程上获得了很多反馈,我决定自己写一本书。对于我来说,这是一个绝佳的机会,去编写一本我一直想要的游戏编程方面的书。
这些年来,我阅读了许多游戏开发方面的书籍,但还是觉得不够。尽管它们提供了许多创建游戏需要的各个部分的知识,也包含了许多小例子,但是从未包括编写出一个足够发布的完整的程序的全过程。我一直认为,一本好书应该告诉读者创建游戏需要什么,同时也应该展示在一个完整的游戏项目中应该如何实现每个组件。
所以,本书不只是介绍在iPhone上编写游戏需要的组件和技术,也会介绍创建一个完整的游戏Sir Lamorak's Quest: The Spell of Release的全过程。从App Store上可以免费下载此游戏,你可以通过它来学习如何编写游戏。
下载游戏
可以通过如下网址从App Store中下载游戏Sir Lamorak's Quest:http://itunes.apple.com/us/app/sir-lamoraks-quest-the-spell/id368507448?mt=8。此游戏是免费的,下载后就可以开始玩了,试着帮助Sir Lamorak逃出城堡!
本书介绍了创建二维游戏的必要组件,涵盖了诸如OpenGL ES和OpenAL的技术,以及必要的关键游戏引擎组件,如精灵表、动画、触摸输入和声音等。
本书的每一章都详细介绍该游戏中的一个特定组件,以及支持该组件的技术,例如贴图地图编辑器,或者尝试用OpenGL ES创建的一些特效。介绍完功能和技术后,紧接着会介绍在游戏Sir Lamorak抯 Quest中实现这些组件的细节。这种理论和实现相结合的方式,有助于填补其他开发书籍留下的空白。
关于游戏Sir Lamorak's Quest
1982年我得到了48KB的Sinclair Spectrum游戏电脑作为圣诞礼物,由此开始了玩游戏的经历。从那刻开始我沉迷于计算机,并从此与之结缘。
一想到要为此书开发的游戏,我就想到了20世纪80年代玩的那些游戏。这些游戏当初给我留下深刻的印象,尽管它们在视觉上并不是很炫目,但是玩起来还是很有意思的。
我在游戏设计上花了很多时间,不仅包括游戏中人物的设计,还包括如何在iPhone上实现游戏设计。游戏的一个关键方面在于它应该玩起来自然随意—即其观念应该简单并易于学习,而且玩家可以在不丢失进度的前提下随意开始和停止游戏。
同时我希望游戏的控件能很轻易地被玩家识别出来,因此我决定实现一个屏幕上的手柄来控制主要角色。然而让玩家能移动手柄位置也很重要,那样的话惯用左手和右手的玩家都能觉得舒适。
对于游戏情景本身,我决定采取我在20世纪80年代玩的那些游戏中的设计观念,即玩家被困在一个废弃的城堡中,他需要找到一个魔咒帮助他逃离城堡。
本书的组织结构
本中总共分16章,每章具体讲解创建游戏Sir Lamorak's Quest的一个特定领域,各章简介如下:
第1章“游戏设计”—本章描述设计游戏Sir Lamorak's Quest时的设计因素。本章会深入讲解开始创建游戏时的想法。虽然本章并不涵盖每个类别的游戏需要的所有可能的游戏设计决定,但确实会讲解最重要的设计决定。
第2章“术语、技术和工具”—即使资深程序员也会被这3个单词搞混。本章介绍创建游戏Sir Lamorak's Quest和其他游戏时使用的基本技术、术语和工具。本章将帮助读者了解贯穿本书的术语和技术。
第3章“开始探索旅程”—从本章开始我们将正式关注代码并往iPhone屏幕上渲染点东西。本章涉及用Xcode中的OpenGL ES样例项目创建第一个项目的过程,详细讲解该样例并为下一章设置好场景。
第4章“游戏循环”—任何游戏的核心都是游戏循环。循环负责确保所有的游戏元素(诸如AI和渲染)在正确的时间按正确的步骤执行。这听起来很简单,但是由于有很多种涉及游戏循环的方法,所以也不是那么简单。本章将介绍这些方法,并详细介绍游戏Sir Lamorak's Quest使用的方法。
第5章“图像渲染”—将图像绘制到屏幕上是任何游戏的基本要求。本章简单介绍OpenGL ES,运行一些已经创建好的类来简化图像的创建和渲染过程。
第6章“精灵表”—精灵表是包含很多小图像的大图像。精灵表用于减少内存中存储的独立图像的数目,并减少OpenGL ES需要绑定以改善性能的纹理数目。创建动画精灵时也会用到精灵表。本章介绍创建精灵表(其中包括游戏中要使用的图像)的过程,无论其维度是固定或可变的。
第7章“动画”—用精灵表存储了动画中需要的不同帧后,本章描述如何将单独的图像组合成动画,如玩家角色跑动的动画。
第8章“点阵字”—与游戏玩家进行交互比较常见的方法是使用文本信息。能将操作指南和信息(例如玩家的分数或如何使用游戏的指导)渲染到屏幕上十分重要。本章描述如何用开源工具将任何字型转换成点阵字。创建好点阵字后,本章会介绍如何创建精灵表,用来存储渲染字型的字符时用到的图像。同时本章详细介绍游戏Sir Lamorak's Quest中用到的Bitmap字型类,它提供了一个简单的API用于渲染文本信息到屏幕上。
第9章“贴图地图”—使用贴图地图可以用一系列小图像创建出大型游戏世界。开发人员经常在内存有限时使用这种方法来创建大型游戏世界(想想任天堂的超级马里奥兄弟吧),在早期的家庭游戏系统中尤为如此。 直到现在,贴图地图技术还是很受欢迎的,本章将描述使用开源贴图编辑工具来创建贴图地图,同时也会介绍将这些地图渲染到屏幕上的类。
第10章“粒子发射器”—许多游戏都有令人难以忘怀的特效,如火、爆炸、烟雾和火花等。这些特效通常是用粒子系统创建出来的。粒子系统负责创建和控制很多粒子;每个粒子都有自己的诸如大小、形状、方向、颜色和生命周期等属性。在其生命周期中,粒子的位置、速度、颜色和大小都会基于其设置发生变化。本章将详细介绍如何创建粒子系统,并用此来产生许多基本特效。
第11章“声音”—即使在现在的现代游戏中,将声音反馈给玩家依然是十分重要的。本章将介绍iPhone的媒体播放器功能和OpenAL,以及介绍如何用这些技术在游戏中播放酷酷的音迹和3D音效。
第12章“用户输入”—本章将介绍如何用iPhone的独特触控技术和加速器功能来控制游戏。本章详细描述如何同时获取和处理多点触控,以及如何在游戏中获取和使用加速器的数据。
第13章“游戏界面”—本章着眼于游戏Sir Lamorak's Quest中游戏界面的实现,包括如何处理旋转事件以确保正确显示用户界面,以及如何混合使用OpenGL ES和UIKit界面控件等。
第14章“游戏对象和实体”—当玩家在游戏Sir Lamorak's Quest的城堡中走动时,我们希望他能找到和捡起对象并能和坏人进行战斗。本章描述如何实现游戏Sir Lamorak's Quest中的对象和实体。
第15章“碰撞检测”—如果玩家和坏人能穿过墙壁和门,游戏就看起来很糟糕,所以有必要检测玩家和对象间,或者玩家与游戏中的对象和实体间的碰撞。本章描述不同类型的碰撞检测,并介绍如何在游戏Sir Lamorak's Quest中实现它们。
第16章“组装起来”—到此时为止,本书已经介绍了很多基础内容。然而,读者还可以为自己的游戏锦上添花。本章介绍在手机来电导致玩家退出游戏时如何保存游戏状态。同时介绍使用仪表进行的单元检测以及如何对游戏进行β测试等内容。
本书的目标读者
本书是为那些有程序开发经验但没有开发过计算机游戏的开发人员准备的。尽管本书假设读者已经有利用Objective-C编程的经验,但每章都会提供Objective-C和其他技术的相关知识,以供读者了解其概念和实现。
读者阅读完本书后,能掌握如下知识:对于游戏Sir Lamorak's Quest的游戏引擎的深度认识,以及创建2D游戏引擎需要的关键能力和需要考虑的事项。本书将使你具备使用本书中的游戏引擎进行自己的游戏开发的能力,或者简单利用创建游戏的知识来使用其他可用的iPhone游戏引擎(例如Cocos2D)的能力。
如果你已经开发过iPhone应用,但想将注意力从实用应用转到游戏上,那么本书就是为你准备的。本书建立在读者已有的开发知识之上,通过描述需要的术语、技术和工具以及提供实际的实现例子,带领读者进入游戏开发的领域。
不适合本书的读者
本书讲的是二维平面游戏,如果你的兴趣不在这里,比如说你感兴趣的是用OpenGL ES来应用三维图形,那么本书并不适合你。
在阅读本书之前,希望你已经对Objective-C、C、Xcode和Interface Builder有了一定的了解。尽管本书中描述的实现已经尽量简化,并且限制在C语言下进行开发,对于其他语言的坚实基础也是很有必要的。
如下书籍会提供一些基础:
Cocoa Programming for Mac OS X,Third Edition by Aaron Hillegass (Addison-Wesley, 2008).
Learning Objective-C 2.0,by Robert Clair (Addison-Wesley,2011).
Programming in Objective-C 2.0,by Stephen G. Kochan (Addison-Wesley,2009).
Cocoa Design Patterns,by Erik M. Buck and Donald A.Yacktman (Addison-Wesley,2009).
The iPhone Developer抯 Cookbook,Second Edition,by Erica Sadun (Addison-Wesley,2010).
Core Animation: Simplified Animation Techniques for Mac and iPhone Development, by Marcus Zarra and Matt Long (Addison-Wesley,2010).
iPhone Programming:The Big Nerd Ranch Guide,by Aaron Hillegass and Joe Conway (Big Nerd Ranch,Inc.,2010).
这些图书和其他一些网上的资源可以帮助你了解更多如何为Mac和iPhone编程的信息,并加深对Objective-C和Cocoa框架的理解。
下载源代码
除了本书之外你还可以了解很多信息。游戏Sir Lamorak's Quest的完整的带有注释的源代码可以从InformIT.com下载。
本书通篇穿插了大量的代码,并为读者准备了很多练习,但是读者仍然很有必要阅读苹果为开发者准备的工具,诸如Xcode和iPhone SDK等。可以从Apple iPhone Dev Center下载这些资源。

媒体评论: 《iPhone游戏开发实践指南》是一本带领读者走入游戏编程的优秀书籍,它详细解释了针对iPad、iPhone以及iPod touch的游戏设计和实现的每个方面。对于那些对编写游戏感兴趣并准备付诸实现的读者,本书是一个不错的选择。—Tom Bradley,TBXML设计者,软件架构师
一位优秀的开发人员和一个超赞的游戏——读者能在这本书中找到这些内容,以学习为iPhone创建酷炫游戏。没准你就是下一个AppStore畅销者!—Sebastien Cardoso
有了《iPhone游戏开发实践指南》,读者可以立即开始编写自己的游戏。书中的代码附有详细的解释,将为读者节省许多在文档中和网上论坛中查找资料的时间。—Pablo Gomez Basanta, Shifting Mind的创始人
作者在学习和教育方面的激情、解决问题的能力以及将一个完整的游戏作为例子程序使得《iPhone游戏开发实践指南》成为我所阅读过的好书之一。—Eugene Snyetilov
如果你对于使用OpenGL和OpenAL在iOS平台上进行2D游戏编程很感兴趣,那么《iPhone游戏开发实践指南》将在避免技术细节障碍的同时,带领你经历创建一个完整并有趣的游戏的过程。—Scott D. Yelich
作者使朦胧的iPhone应用开发变得清晰。具体的例子、通彻的解释以及省时的小技巧使得《iPhone游戏开发实践指南》成为了每个即将开发iPhone游戏的开发人员的必备参考书。—Brandon Middleton,Tic Tac Toe Ten的创建者
《iPhone游戏开发实践指南》是一本iOS游戏开发的完全手册;这本书带领读者走过从基础和术语到实践使用技术,以开发完整游戏的全过程。在你认识到这一点以前,你将发现在开发自己的游戏时,从这本书中学到的扎实的原理和技术会提供很大的动力。在开发自己的游戏时,没有比这本书更好的参考资料了。—Rod Strougo,Prop Group的创始人