第一部分 基础知识 2
第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 Sprite Kit游戏循环 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 Sprite Kit游戏循环,第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 灯光、相机,开始 68
5.2 滚动的背景 70
5.3 不断滚动的背景 72
5.4 修改游戏设置 74
5.5 挑战 75
挑战1:修改猫女士 75
第6章 标签 77
6.1 内建字体和字体族 77
创建标签 79
6.2 给Zombie Conga添加一个标签 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
第二部分 物理和节点 102
第8章 场景编辑器 102
8.1 开始 103
材质图册简介 104
8.2 开始使用场景编辑器 105
8.2.1 Object Library 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 Sprite Kit中的物理引擎 122
物理实体 123
9.2 开始 124
9.3 第一个Playground 126
9.4 创建一个Sprite Kit Playground 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 Spirt Kit游戏循环,第3轮 168
11.2 关卡2简介 170
11.3 加载关卡 171
11.4 场景编辑器,第2轮 171
弹弓 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 Sprite Kit游戏循环,第4轮 181
11.8 限制概览 182
11.8.1 实现绳子的限制 183
11.8.2 更多限制 184
11.9 动态地创建和删除接合 184
11.10 组合形状 187
11.10.1 设计关卡3 188
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 形状节点基础 209
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 Apple TV遥控,第2轮 220
13.3.1 TV控制第1部分:谁应该采取行动 220
13.3.2 TV控制第2部分:停留在循环中 222
13.3.3 和Apple TV模拟器交互 225
13.3.4 TV控制第3部分:点击所有内容 225
13.4 挑战 227
挑战 1:打磨Apple TV上的所有关卡 227
第三部分 果汁 232
第14章 开发Drop Charge 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 使用Core Motion来控制玩家 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 开始 255
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 添加声音效果 287
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 304
第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
20.1 GameplayKit的代理、目标和行为 346
20.2 添加代理 347
20.3 添加行为和目标 348
20.4 在代理上设置行为 349
实现GKAgentDelegate 351
20.5 音乐插曲 352
20.6 攻击波 352
20.6.1 发送攻击波 354
20.6.2 随机选取起始位置 355
20.6.3 从攻击波中删除恐龙 356
20.7 HUD 358
20.8 减少生命数 359
20.9 花钱建造塔防 360
20.10 降速效果 361
20.11 挑战 364
挑战1: TV版的Dino Defense 364
第五部分 高级话题 366
第21章 贴图地图游戏 366
21.1 Delve简介 366
21.2 开始 367
21.2.1 开始关卡构建 368
21.2.2 创建一个基本的关卡 369
21.2.3 显示关卡 369
21.2.4 添加一个相机节点 371
21.3 打造一个基于贴图的关卡 372
预先设置关卡 374
21.4 实现状态机 375
21.5 游戏需要一个英雄人物 377
21.5.1 创建精灵组件 378
21.5.2 将英雄添加到场景中 378
21.5.3 创建动画组件 380
21.5.4 添加组件系统 384
21.5.5 让英雄移动起来 385
21.5.6 通过倾斜来移动 387
21.5.7 更新动画 389
21.5.8 将相机聚焦到英雄身上 390
21.5.9 添加碰撞 390
21.6 挑战 392
挑战1:定制关卡 392
第22章 随机性 393
22.1 随机意味着什么 393
22.2 GameplayKit的随机性 394
22.2.1 随机性分布 394
22.2.2 随机性源 396
22.3 醉汉行走算法 397
22.4 开始 397
22.5 实现醉汉行走算法 401
22.5.1 更新地图生成器 402
22.5.2 到达出口 404
22.6 制作更好的关卡 406
组合分布 408
22.7 挑战 410
挑战1:随机贴图 411
第23章 程序式关卡 412
23.1 基于房间的程序式关卡设计 412
23.2 构建更好的生成器 413
构建房间 413
23.3 填充地牢 417
23.3.1 处理生命值 418
23.3.2 引入石人 420
23.3.3 创建一个武器 427
23.4 挑战 431
挑战1:难度 432
第24章 游戏控制器 433
24.1 控制器格式 434
24.2 开始 434
24.3 创建控制器管理器 436
24.3.1 指定控制 439
24.3.2 标准游戏手柄 440
24.3.3 使用控制器命令 440
24.3.4 移动控制 442
24.3.5 扩展游戏手柄 443
24.4 添加tvOS目标 444
24.5 在tvOS上支持控制器 446
24.5.1 连接到控制器 447
24.5.2 微游戏手柄 447
24.5.3 绑定控制 449
24.6 挑战 450
挑战1:暂停游戏 450
第六部分 额外章节 452
第25章 Game Center成就 452
25.1 开始 452
25.2 Game Center简介 453
25.3 配置App以使用Game Center 454
25.3.1 打开Game Center 455
25.3.2 在iTune Connect上注册App 455
25.3.3 配置Game Center成就 457
25.4 认证本地玩家 459
25.4.1 认证回调 460
25.4.2 将认证加入到游戏中 460
25.5 添加成就 463
25.5.1 为成就创建一个辅助类 463
25.5.2 将成就整合到游戏中 464
25.6 初始化内建的用户界面 466
将UI加入到游戏中 467
25.7 挑战 469
挑战1: Racing addict和成就 469
第26章 Game Center排行榜 470
26.1 支持排行榜 470
26.1.1 步骤1:认证本地玩家 470
26.1.2 步骤2:创建一个排行榜策略 470
26.1.3 步骤3:在iTunes Connect中配置排行榜 471
26.1.4 步骤4:向Game Center报告得分 474
26.1.5 步骤5:向玩家显示排行榜 476
26.2 排行榜集合 477
26.3 Game Center的安全性 479
26.3.1 提交如何工作 480
26.3.2 限制作弊 480
26.4 挑战 480
挑战1:排行榜集合 480
第27章 ReplayKit 481
27.1 ReplayKit架构 481
27.2 整合ReplayKit 482
27.2.1 步骤1:创建一个策略来开始和停止记录 483
27.2.2 步骤2:修改用户界面 484
27.2.3 步骤3:检查可用性 488
27.2.4 步骤4:开始和停止记录 491
27.2.5 步骤5:预览和分享记录 496
第28章 iAd 498
28.1 iAd简介 498
28.2 iAd是如何工作的 498
28.3 广告格式 499
28.3.1 横幅广告 499
28.3.2 间隙广告 500
28.3.3 媒介反馈广告 501
28.3.4 预滚动广告 501
28.4 整合iAd 501
28.5 加入iAd网络 501
28.6 加入iAd框架 502
28.7 显示横幅广告 504
28.8 显示间隙广告 506
28.9 iAd最佳实践 507
28.10 挑战 507
挑战1:自动显示 507
第29章 写给程序员的2D美工知识 508
29.1 选择路径:雇人还是DIY 508
29.1.1 雇佣一名美术师 508
29.1.2 自己做美工 508
29.2 如何找到并雇佣一位美术师 509
29.2.1 会议和聚会 509
29.2.2 Twitter 509
29.2.3 搜索简历 509
29.2.4 招募申请者 510
29.2.5 这真的有用吗 510
29.3 向美术师付酬 510
29.3.1 收入分成合同 510
29.3.2 固定报酬合同和分小时报酬 510
29.3.3 价格预期 511
29.4 开始 511
29.5 开始绘制草图 512
29.6 将草图导入到Illustrator中 515
29.7 用矢量线条描摹草图 517
29.7.1 编辑路径 519
29.7.2 创建复杂的线条 519
29.7.3 将线条的末端圆角化 520
29.7.4 完成轮廓 520
29.8 定制画笔宽度 520
29.8.1 为Illustrator创建一个默认的宽度样式 521
29.8.2 针对不同的线条形状,使用其他的宽度样式 521
29.9 给美工图上色 522
29.9.1 使用路径寻找器来组合形状 524
29.9.2 给眼睛上色 525
29.9.3 为某个区域上色 526
29.9.4 关于图层的一点说明 527
29.9.5 调整对象层的顺序 528
29.10 关于阴影和光线 529
29.10.1 表现深度的额外阴影细节 530
29.10.2 给轮廓上色 531
29.11 导出PNG文件 532
29.12 挑战 534
挑战1:老鼠 534
挑战2:小狗 534