编辑推荐
本书是作者团队精心为初学者打造的iOS和tvOS 2D游戏的开发教程。本书按照“从开发游戏中学习,从挑战实践中学习”的原则,通过游戏开发的实际案例来进行讲解,借助挑战实践让读者运用所学的知识。同时,本书关注游戏设计理念、实现,尤其是游戏开发中的打磨等整体过程,帮助读者掌握从游戏思路、代码实现,到后期优化,tvOS移植甚至App Store上线后的完整工作环节。
本书内容详尽、生动有趣,适合对iOS和tvOS上的游戏开发感兴趣的初学者阅读参考。
本书配套代码和素材可以从www.epubit.com.cn下载。
阅读本书,跟随作者一起开发以下几款不同类型的、精彩的iOS 2D游戏:
■ 僵尸游戏Zombie Conga——跳着康茄舞的僵尸,要咬住旁边的小猫,让它们加入康茄舞的队列;猫女士则用她的雨
伞对抗僵尸,抢救小猫。
■ 谜题游戏Cat Nap——困倦的小猫想要上床睡觉,必须想方设法破坏掉木头块,而且要正好落在床上而不是地上。
■ 平台跳跃游戏Drop Charge——太空英雄肩负摧毁外星人的飞船的使命,并且要在爆炸之前逃生,从一个平台跳到另
一个平台,一路上可以收集金币,但是小心不要被火热的岩浆吞噬掉。
■ 塔防攻击游戏Dino Defense——成群的恐龙要攻击玩家的村庄,玩家必须在地图上放置炮塔,向恐龙发射石头或木头
炮弹,以阻止敌人靠近他们的家园。
■ 地牢探险游戏Delve——矿工需要在耗尽生命值之前逃出地牢,而大群的黑暗神秘石人则试图阻止他逃走。
■ 赛车游戏Circuit Racer——赛车手驾驶着赛车绕赛道完成跑圈,可以选择容易、中等和困难等不同难度级别的赛道,但不要撞击围栏超过规定的次数。
内容简介
Sprite Kit是Apple内建的框架,专门用于开发iOS的2D游戏。tvOS是Apple TV所使用的操作系统平台,可以将App和游戏等呈现到大屏幕的TV上。本书详细介绍了如何使用Apple内建的2D游戏框架Sprite Kit和Swift语言来开发iOS和tVOS游戏。
全书共分为5个部分29章。每个部分针对一类技术主题,并且通过一款生动的游戏的开发贯穿其中。当学习完每个部分的时候,读者通过一款游戏的关卡或功能的逐步完成和完善,不知不觉掌握了作者所要介绍的技术主题。
第1部分包括前7章,涵盖了用Sprite Kit进行2D游戏开发的基础知识,分别介绍了角色、手动移动、动作、场景、相机、标签等主题,并且初步认识了tvOS。这部分将开发一款叫做Zombie Conga的僵尸游戏,并将其迁移到tvOS上。第二部分包括第8章到第13章,主要介绍场景编辑器、游戏开发的物理知识,裁剪、视频和形状节点以及中级tvOS知识。这部分将开发一款叫做Cat Nap的谜题游戏,并将其迁移到tvOS上。第三部分关注给游戏添加特效,包括第14章到第17章,将开发一款叫做Drop Charge的游戏,并通过状态机、粒子系统、声影效果、动画等众多技术来点亮这款游戏。第四部分包括第18章到第20章,主要关注iOS 9新引入的GameplayKit技术。这部分会开发一款Dino Defense塔防攻击游戏,并通过实体-组件系统、寻路算法和代理、目标和行为等技术,实现游戏中的恐龙的寻路和移动行为。第五部分包括第21章到第24章,涉及贴图地图、程序式关卡生成、GameplayKit随机性和游戏控制器等高级话题。这部分将开发一款叫做Delve的地牢探险游戏,并应用各章所介绍的技术。第六部分包括第24章到第29章,涉及和游戏相关的其他技术,包括向游戏中添加Game Center排行榜和成就、使用ReplayKit录制游戏视频并进行分享、把iAd加入到游戏中,以及程序员如何实现游戏美工。这部分将打造一款叫做Circuit Racer的赛车游戏中,并加入各章所所介绍的技术。
本书内容详尽、生动有趣,通过丰富、完整的游戏案例,帮助读者学习和掌握全新的游戏开发技术。本书适合对iOS和tvOS上的游戏开发感兴趣的初学者阅读参考。
作者简介
Mike Berg是一位全职的游戏美术师,他很幸运地和来自全世界的独立游戏开发者一起工作。当他没有处理像素色彩的时候,他喜欢美食、花时间和家人在一起,以及玩游戏并感受快乐。可以通过www.weheartgames.com找到他的作品。
Michael Briscoe是一位有着30多年经验的独立的软件开发者。他所选择的平台包括Apple的所有产品,从Macintosh、 到iPhone、iPad和Apple TV。他的专长是开发娱乐性软件,例如游戏和模拟器。可以访问他的Web站点skyrocketsoftware. wordpress.com。
Kauserali Hafizji是一位开发者。他是一位热衷编写代码的程序员,甚至在周末的时候,他也在编程。一本好书,泡个澡,再吃上一顿大餐,对他来说就可以过一个很好的周末了。你可以通过@Ali_hafizji在Twitter上找到他。
Neil North是一位资源管理员、软件开发者和业务自动化专家,他很喜欢开发独立的游戏、从事音频工程,以及帮助其他人实现有创意的目标。他还教授iOS游戏和App开发,并且在Udemy和CartoonSmart上都开设了课程。Neil居住在澳大利亚,你可以访问他的网站apptlycreative.com。
Toby Stephens有20多年的软件开发经验,并且目前是伦敦的inplaymaker移动开发总监。Toby热衷于游戏编程。他还会编写乐曲,并且喜欢烘焙面包。可以通过@TJShae在Twitter上联系他,也可以访问他的网站website: tjshae.com。
Rod Strougo从Apple II开始了自己的物理和游戏之旅,开始用Basic编写游戏。Rod的职业生涯有过转型,他花了15年的时间为IBM和AT&T编写软件。在那些日子里,他始终保持着在游戏开发和教学方面的热忱,并且在Big Nerd Ranch等处提供iOS培训。他起初来自巴西的Rio de Janeiro,现在和妻子和儿子一起居住在亚特兰大。
Marin Todorov是一位独立的iOS开发者和作者。他20多年前开始在Apple II上就行开发,并且一直持续到今天。除了编写代码,Marin还喜欢写博客、写书、教学和演讲。他有时候会花时间为开源项目编写代码。他居住在Santiago。可以访问他的Web站点www.underplot.com。
Ray Wenderlich是一位iPhone开发者,也是Razeware LLC的创始人。Ray对于开发App和教授其他人开发App都充满了热情。他和他的教程团队已经编写了很多iOS开发教程,参见www.raywenderlich.com 。
目录
- 第一部分 基础知识
- 第1章 精灵 2
- 1.1 开始 2
- 1.1.1 通用App支持 6
- 1.1.2 添加图像 7
- 1.1.3 启动界面 8
- 1.2 显示精灵 11
- 1.2.1 创建精灵 11
- 1.2.2 把精灵加到场景 11
- 1.2.3 定位精灵 12
- 1.2.4 设置精灵的锚点 13
- 1.2.5 旋转精灵 14
- 1.2.6 获取精灵的大小 15
- 1.2.7 精灵和节点 15
- 1.2.8 节点和z位置 16
- 1.2.9 最后修整 16
- 1.3 挑战 17
- 挑战1:添加僵尸 17
- 挑战2:进一步的文档 18
- 第2章 手动移动 19
- 2.1 SpriteKit游戏循环 19
- 2.2 移动僵尸 21
- 2.2.1 第1次迭代:每帧固定移动 21
- 2.2.2 第2次迭代:速率乘以时间增量 23
- 2.2.3 第3次迭代:朝着触摸的方向移动 24
- 2.2.4 第4次迭代:边界检测 28
- 2.2.5 第5次迭代:游戏区域 29
- 2.3 旋转僵尸 31
- 2.4 挑战 33
- 挑战1:数学工具 33
- 挑战2:让僵尸停下来 35
- 挑战3:平滑移动 35
- 第3章 动作 38
- 3.1 移动动作 38
- 3.2 连续动作 40
- 3.3 等待动作 41
- 3.4 运行代码块动作 42
- 3.5 反向动作 42
- 3.6 重复动作 44
- 3.7 定期生成 45
- 3.8 从父节点删除动作 46
- 3.9 动画动作 47
- 3.10 停止动作 48
- 3.11 缩放动画 49
- 3.12 旋转操作 50
- 3.13 组动作 51
- 3.14 碰撞检测 52
- 3.15 SpriteKit游戏循环第2轮 54
- 3.16 声音动作 55
- 3.17 共享动作 55
- 3.18 挑战 56
- 挑战1:ActionsCatalog演示程序 56
- 挑战2:一个受保护的僵尸 57
- 挑战3:康茄舞队 57
- 第4章 场景 59
- 4.1 获胜或失败的条件 59
- 4.2 创建一个新的场景 61
- 4.3 转换到一个场景 62
- 4.4 创建一个定制的场景初始化程序 63
- 4.5 背景音乐 65
- 4.6 挑战 65
- 挑战1:主菜单场景 66
- 第5章 相机 67
- 5.1 灯光、相机,开始 67
- 5.2 滚动的背景 70
- 5.3 不断滚动的背景 72
- 5.4 修改游戏设置 74
- 5.5 挑战 75
- 挑战1:修改猫女士 75
- 第6章 标签 77
- 6.1 内建字体和字体族 77
- 创建标签 79
- 6.2 给ZombieConga添加一个标签 80
- 6.3 对齐方式 81
- 6.4 加载定制字体 83
- 6.5 更新标签文本 86
- 6.6 挑战 86
- 挑战1:小猫计数 86
- 第7章 初识tvOS 88
- 7.1 tvOS用户输入 88
- 7.2 开始 89
- 7.3 按钮按下 92
- 7.4 添加一个tvOS目标 93
- 7.5 修正触摸处理 97
- 7.6 上架图像和3D图标 99
- 第二部分 物理和节点
- 第8章 场景编辑器 102
- 8.1 开始 103
- 8.1.1 材质图册简介 104
- 8.2 开始使用场景编辑器 105
- 8.2.1 ObjectLibrary 106
- 8.2.2 添加和放置精灵 107
- 8.2.3 布置第一个场景 108
- 8.3 文件引用 110
- 8.4 动画和动作引用 112
- 给节点添加动作 113
- 8.5 关于时间线的更多介绍 114
- 重复动作 115
- 8.6 挑战 118
- 挑战1:进一步创建小猫动作 118
- 挑战2:进一步创建小猫场景 120
- 第9章 物理基础 122
- 9.1 SpriteKit中的物理引擎 122
- 物理实体 123
- 9.2 开始 124
- 9.3 第一个Playground 126
- 9.4 创建一个SpriteKitPlayground 127
- 9.5 圆形实体 131
- 9.6 边缘闭合实体 133
- 9.7 矩形实体 134
- 9.8 定制形状的实体 134
- 9.9 可视化实体 135
- 9.10 复杂形状的实体 136
- 9.11 物理实体的属性 138
- 9.12 应用冲击 139
- 9.13 挑战 141
- 挑战1:力量 141
- 挑战2:体感实体 142
- 第10章 中级物理 143
- 10.1 开始 143
- 10.2 定制节点类 144
- 10.3 将精灵连接到变量 146
- 10.4 添加物理 147
- 10.4.1 在场景编辑器中创建简单实体 148
- 10.4.2 模拟场景 149
- 10.4. 3用代码创建简单实体 150
- 10.4.4 创建定制实体 151
- 10.5 SKTUtils简介 151
- 10.6 背景音乐 152
- 10.7 控制实体 152
- 10.7.1 分类实体 153
- 10.7.2 处理触摸 155
- 10.7.3 检测实体之间的碰撞 157
- 10.7.4 检测实体之间的接触 159
- 10.8 最终修改 161
- 10.8.1 添加一条游戏进行中的消息 161
- 10.8.2 失败场景 162
- 10.8.3 播放动画 164
- 10.8.4 获胜场景 165
- 10.9 挑战 166
- 挑战1:统计弹跳次数 167
- 第11章 高级物理 168
- 11.1 SpirtKit游戏循环第3轮 168
- 11.2 关卡2简介 170
- 11.3 加载关卡 171
- 11.4 场景编辑器,第2轮 171
- 11.4.1 弹弓 174
- 11.5 接合概览 175
- 11.5.1 固定接合 175
- 11.5.2 有限接合 176
- 11.5.3 弹性接合 176
- 11.5.4 别针接合 177
- 11.5.5 滑动接合 177
- 11.6 接合的应用 178
- 11.6.1 使用固定接合 178
- 11.6.2 使用弹性接合 180
- 11.7 SpriteKit游戏循环,第4轮 181
- 11.8 限制概览 182
- 11.8.1 实现绳子的限制 183
- 11.8.2 更多限制 184
- 11.9 动态地创建和删除接合 184
- 11.10 组合形状 187
- 11.10.1 设计关卡3188
- 11.10.2 创建组合对象 189
- 11.11 关卡推进 192
- 11.12 挑战 192
- 挑战1:给Cat Nap再添加一个关卡 193
- 第12章 裁剪、视频和形状节点 195
- 12.1 开始 196
- 12.2 裁剪节点 196
- 12.3 视频节点 200
- 12.3.1 创建一个视频节点 200
- 12.3.2 视频播放 202
- 12.3.3 开始和结束 204
- 12.3.4 迪斯科舞小猫 206
- 12.4 形状节点 208
- 12.4.1 添加一个形状节点 209
- 12.4.2 形状节点基础 210
- 12.4.3 添加提示箭头 211
- 12.5 挑战 214
- 挑战1:提示无处不在 214
- 挑战2:当fillColor遇到fillTexture 214
- 第13章 中级tvOS 215
- 13.1 添加一个tvOS目标 215
- 上架图像和3D图标 216
- 13.2 将代码移植到tvOS 218
- 13.3 AppleTV遥控,第2轮 220
- 13.3.1 TV控制第1部分:谁应该采取行动 220
- 13.3.2 TV控制第2部分:停留在循环中 222
- 13.3.3 和AppleTV模拟器交互 225
- 13.3.4 TV控制第3部分:点击所有内容 226
- 13.4 挑战 227
- 挑战1:打磨Apple TV上的所有关卡 227
- 第三部分 果汁
- 第14章 开发DropCharge 232
- 14.1 开始 232
- 添加图片 233
- 14.2 在场景编辑器中构建游戏世界 234
- 14.2.1 配置场景 234
- 14.2.2 添加背景精灵 234
- 14.2.3 添加前景精灵 236
- 14.2.4 创建平台 236
- 14.2.5 创建金币 237
- 14.3 编写游戏设置代码 238
- 14.3.1 添加平台 238
- 14.3.2 更多平台 241
- 14.3.3 扔炸弹 241
- 14.3.4 获取物理效果 242
- 14.3.5 碰撞检测 243
- 14.3.6 使用CoreMotion来控制玩家 244
- 14.3.7 相机跟踪 245
- 14.3.8 让岩浆流动 247
- 14.3.9 重复背景、金币和平台 249
- 14.3.10 还有一件事情 249
- 14.4 挑战 250
- 挑战1:创建跨5块的、可破裂的平台 250
- 挑战2:创建一个“特殊的”金币箭头 250
- 挑战3:创建额外的平台和金币样式 251
- 挑战4:为新的覆盖对象添加代码 252
- 第15章 状态机 254
- 15.1 状态机是如何工作的 254
- 15.2 开始 256
- 15.3 状态1:等待点击 256
- 15.4 状态2:等待炸弹 257
- 15.5 状态3:玩游戏 259
- 更新游戏设置 260
- 15.6 状态4:游戏结束 261
- 15.7 最后修改 262
- 15.8 挑战 263
- 挑战1:一个英雄状态机 263
- 第16章 粒子系统 265
- 16.1 粒子系统是如何工作的 266
- 16.1.1 粒子系统理论 266
- 16.1.2 粒子系统的实际应用 266
- 16.2 粒子系统编程 267
- 16.2.1 粒子系统的核心属性 268
- 16.2.2 让模拟提前进行 270
- 16.2.3 粒子系统的更多核心属性 271
- 16.2.4 范围属性 271
- 16.2.5 关键帧属性 271
- 16.2.6 序列属性 272
- 16.3 可视化地创建粒子系统 273
- 16.3.1 创建一个SKS文件 273
- 16.3.2 Xcode粒子发射器编辑器 274
- 16.3.3 制作岩浆 275
- 16.3.4 加载SKS文件 276
- 16.3.5 持续的系统和运行一次的系统 277
- 16.3.6 哪里有火,哪里就会有烟 277
- 16.3.7 目标粒子系统 279
- 16.4 挑战 280
- 挑战1:收集常规金币的效果 280
- 挑战2:收集特殊金币的效果 280
- 挑战3:破裂平台效果 280
- 挑战4:玩家轨迹效果 280
- 第17章 点亮游戏 282
- 17.1 给游戏添加果汁的3个步骤 283
- 17.1.1 步骤1:角色 283
- 17.1.2 步骤2:交互 283
- 17.1.3 步骤3:5种基本的特效 284
- 17.2 开始 285
- 17.3 音乐和声音效果 285
- 17.3.1 创建变化的节奏 286
- 17.3.2 添加声音效果 286
- 17.3.3 最后的声音效果 288
- 17.4 帧动画 289
- 17.4.1 可视化地创建动作 289
- 17.4.2 通过时间线编辑 290
- 17.4.3 使用金币应用 291
- 17.4.4 用代码实现动画动作 292
- 17.5 粒子效果 294
- 17.5.1 随机爆炸 295
- 17.5.2 增加力量粒子效果 296
- 17.5.3 游戏结束了 297
- 17.6 屏幕效果 297
- 振动、振动,还是振动 298
- 17.7 精灵效果 299
- 弹跳的平台 300
- 17.8 最后的修改 301
- 17.9 挑战 302
- 挑战1:创建一个“挤压和拉伸”效果 302
- 挑战2:将Drop Charge移植到tvOS上 302
- 17.10 如何继续学习 302
- 第四部分 GameplayKit
- 第18章 实体—组件系统 304
- 18.1 开始 304
- 18.1.1 游戏层 305
- 18.1.2 材质图册 305
- 18.2 GameplayKit简介 306
- 18.3 实体—组件系统 307
- 18.4 GameplayKit的实体—组件系统 308
- 18.5 第一个组件 308
- 18.6 第一个实体 309
- 18.7 将实体添加到场景 310
- 18.8 阴影组件 312
- 18.9 动画组件 313
- 18.9.1 GKComponentSystem 316
- 18.9.2 添加到实体 317
- 18.10 重用组件 318
- 18.11 发射组件 320
- 发射炮弹 322
- 18.12 挑战 324
- 挑战1:生命值组件 325
- 第19章 寻路算法 328
- 19.1 GameplayKit中的寻路 328
- 19.1.1 基于网格的寻路 328
- 19.1.2 基于障碍物的寻路 329
- 19.2 塔防障碍物 329
- 打开GameScene.sks 329
- 19.3 塔防选择器动画 332
- 19.4 选择塔防 334
- 19.5 显示菜单 335
- 19.6 放置塔防 336
- 19.7 创建障碍物图形 337
- 19.8 将塔防添加到障碍物图形 337
- 19.9 用寻路算法移动实体 338
- 19.10 挑战 341
- 挑战1:更多障碍物 341
- 挑战2:精灵的Z位置 344
- ……
- 第20章 代理、目标和行为 346
- 第五部分 高级话题
- 第21章 贴图地图游戏 366
- 第22章 随机性 393
- 第23章 程序式关卡 412
- 第24章 游戏控制器 433
- 第六部分 额外章节
- 第25章 GameCenter成就 452
- 第26章 GameCenter排行榜 470
- 第27章 ReplayKit 481
- 第28章 iAd 498
- 第29章 写给程序员的2D美工知识 508