第1章 革命性的游戏平台:随时随地,人人都可以游戏 1
1.1 无处不在的iPhone 1
1.2 iPhone的广泛吸引力——每时每刻都在诞生新的玩家 2
1.3 iPhone的用户界面——手柄终结者 3
1.4 iPhone的连接性——和其他玩家一起玩 4
1.5 iPhone中的用户数据——个性化体验 5
1.6 iPhone设备的性能——强大的多媒体没备 6
1.7 iPhone的开发包——人人皆可拥有 7
1.8 创新——来自小开发商的大创意 8
1.9 本章小结 9
第2章 iPhone游戏开发:iPhone工具箱一览 11
2.1 开发工具和开发环境 11
2.2 UIKit 12
2.3 Quartz 2D和Core Animation 13
2.4 OpenGL ES 13
2.5 音频API 14
2.6 网络 15
2.7 本章小结 16
第3章 在小屏幕上移动图像——使用UIKit控件 17
3.1 Cocoa Touch简介 17
3.1.1 Objective-C语言 18
3.1.2 Cocoa Touch和UIKit框架 25
3.2 构建一款简单的游戏 27
3.2.1 创建一个Xcode项目 27
3.2.2 创建IVBricker用户界面 29
3.2.3 华丽的图像才够格 34
3.2.4 完成了吗 57
3.3 应用程序委托事件 57
3.3.1 应用程序终止 58
3.3.2 应用程序中断 58
3.3.3 低内存警告 59
3.4 保存和加载游戏状态 59
3.5 动画图像 63
3.5.1 使用UIImageView的动画属性 63
3.5.2 通过NSTimer实现动画 64
3.5.3 通过CADisplayLink实现动画 66
3.6 本章小结 68
第4章 射击、命中与得分 71
4.1 Quartz 2D游戏概述 71
4.2 所有的艺术家都需要画布 73
4.3 用Quartz 2D创建第一个图形 79
4.3.1 保存和还原上下文 80
4.3.2 添加颜色 82
4.4 Sprites 83
4.4.1 创建Sprite类 83
4.4.2 使用Sprite类 89
4.5 哪一面朝上 91
4.5.1 切换到水平方向 91
4.5.2 将原点居中 93
4.6 矢量图 94
4.6.1 创建VectorSprite类 94
4.6.2 使用VectorSprite类 97
4.7 翻页动画 100
4.7.1 创建AtlasSprite类 101
4.7.2 修改Sprite类 105
4.7.3 使用AtlasSprite类 107
4.8 抬头显示 110
4.8.1 创建TextSprite类 111
4.8.2 使用TextSprite类 116
4.9 Asteroids游戏架构 117
4.9.1 Asteroids游戏循环 117
4.9.2 Asteroids模型 118
4.9.3 Asteroids视图 120
4.9.4 Asteroids游戏控制器 121
4.10 本章小结 123
第5章 通过CoreAnimation实现动画效果 125
5.1 Core Animation示例项目概述 125
5.2 UIView的动画 127
5.2.1 简单移动 130
5.2.2 动画曲线 131
5.2.3 反向和重复 132
5.2.4 延时、缓入和缓出 134
5.2.5 UIView变换 135
5.2.6 UIView过渡 137
5.3 连续变化的Core Animation层 139
5.3.1 隐式动画 140
5.3.2 定时函数 140
5.3.3 层动画过渡 141
5.4 本章小结 145
第6章 OpenGL基础:理解OpenGL API 147
6.1 什么是OpenGL ES和为什么要使用OpenGL ES 147
6.2 理解3D世界 148
6.3 矩阵的基本概念 149
6.3.1 综合平移、旋转和缩放 151
6.3.2 矩阵类型 151
6.3.3 有状态的API 152
6.4 渲染的基本概念 153
6.5 基本游戏模板 154
6.6 将CAEAGLLayer包装在EAGLView视图中 155
6.6.1 第一步:初始化方法 155
6.6.2 帧缓冲区、渲染缓冲区和深度缓冲 158
6.6.3 进入OpenGL的世界 160
6.6.4 绘制和渲染 164
6.7 如何通过0penGL绘制物体 165
6.7.1 场景对象和网格对象 165
6.7.2 压入和弹出矩阵 168
6.7.3 在场景中放置对象 169
6.7.4 在3D空间中定义对象 171
6.8 游戏循环和定时器 174
6.9 输入控制器 178
6.10 应用程序委托 179
6.11 本章小结 180
第7章 综合所学知识:创建一款OpenGL游戏 181
7.1 游戏设计——Space Rocks! 181
7.2 以模板为基础开始进行游戏设计 183
7.3 屏幕翻转 184
7.4 升级为3D点 186
7.5 添加按钮 188
7.5.1 创建按钮对象 189
7.5.2 使用顶点数据 190
7.5.3 存储按钮 192
7.5.4 触摸检测 194
7.5.5 连接按钮 199
7.6 构建更好的宇宙飞船 200
7.6.1 移动起来 200
7.6.2 添加宇宙飞船 201
7.6.3 添加和删除场景对象 203
7.6.4 飞出屏幕边缘 205
7.7 Space Rocks! 206
7.8 添加导弹 209
7.8.1 发射导弹 210
7 8.2 删除不需要的导弹 211
7.9 制作更好看的按钮 212
7.10 碰撞检测 214
7.10.1 什么是碰撞 214
7.10.2 检测碰撞的技术 214
7.11 碰撞石块 218
7.11.1 质心和半径 218
7.11.2 碰撞对象和被碰撞对象 220
7.11.3 再论碰撞检测 230
7.12 本章小结 232
第8章 图册、Sprite和粒子系统 233
8.1 纹理和纹理图册 233
8.1.1 什么是纹理,为什么要使用纹理 234
8.1.2 将图像数据载入OpenGL 234
8.1.3 绑定纹理 238
8.1.4 使用Uv坐标 239
8.1.5 获得纹理贴图的四边形 240
8.1.6 认识纹理图册 241
8.1.7 推陈出新 245
8.1.8 更好的用户界面 246
8.1.9 带有纹理的颜色 248
8.2 Sprite动画 249
8.2.1 与帧率无关的设计 251
8.2.2 其他动画 255
8.3 从2D迈向3D 256
8.3.1 多了一个维度意味着什么 256
8.3.2 3D模型从何而来 257
8.3.3 从建模工具到屏幕显示 258
8.3.4 什么是法线 258
8.3.5 标准化为GL_TRIANGLES 259
8.3.6 纹理加上模型 260
8.3.7 影子展示出形状 261
8.3.8 深度缓冲区和背面剔除 264
8.3.9 碰撞检测的改进 266
8.4 粒子系统给游戏带来了生机 267
8.4.1 什么是粒子系统 267
8.4.2 大量随机数 268
8.4.3 粒子系统的根本:粒子 268
8.4.4 粒子发射器 269
8.4.5 系统调整 276
8.4.6 其他对象的粒子系统 277
8.4.7 What the Future Holds:Shaders 278
8.5 本章小结 278
第9章 核心音频简介 279
9.1 核心音频提供的音频服务 279
9.1.1 音频单元 280
9.1.2 音频文件服务 280
9.1.3 音频文件流式服务 280
9.1.4 音频转换服务 280
9.1.5 扩展的音频文件服务 281
9.1.6 音频会话服务 281
9.1.7 系统声音服务 281
9.1.8 音频队列服务 281
9.1.9 AVFoundation 281
9.1.10 OpenAL 282
9.2 核心音频框架 283
9.3 编解码器和文件格式 284
9.3.1 核心音频所支持的编解码器 284
9.3.2 核心音频支持的文件格式 285
9.3.3 通过afconvert转换格式 286
9.3.4 硬件加速的编解码器:受限和非受限的编解码器组 286
9.3.5 有关编解码器和文件格式的建议 287
9.4 警告和振动:系统声音服务介绍 288
9.4.1 不使用系统声音服务作为通用音效的情形 289
9.4.2 系统声音服务示例 290
9.4.3 关于片步播放的注意事项 295
9.5 设置音频策略:音频会话服务介绍 296
9.5.1 使用音频会话服务的样本代码和过程 297
9.5.2 检测硬件并狭得属性 299
9.6 通过AVFoundation利用Objective-C轻松播放音频 300
9.7 本章小结 310
第10章 通过OpenAL发出声音 311
10.1 OpenAL概述 311
10.1.1 OpenAL支持的特性 311
10.1.2 OpenAL简史 312
10.2 Eric Wing的故事和音频涵盖的内容 315
10.3 内容指引 316
10.4 在OpenAL中设置基本声音 316
10.4.1 设置音频会话 318
10.4.2 打开设备 318
10.4.3 创建上下文 321
10.4.4 激活上下文 322
10.4.5 生成声音源 322
10.4.6 生成数据缓冲区 323
10.4.7 从文件中加载声音数据 323
10.4.8 将声音数据提交至OpenAL数据缓冲区 327
10.4.9 将数据缓冲区关联至声音源 329
10.4.10 播放声音 329
10.4.11 关闭并清理 329
10.5 更多问题和细节补充 331
10.5.1 添加更多的声音 332
10.5.2 需要注意的问题 336
10 5.3 OpenAL错误检查 336
10.5.4 音频会话中断 338
10.5.5 iOS的OpenAL扩展 341
10.5.6 性能说明 341
10.5.7 OpenAL声音源的限制 342
10.6 声音资源管理器:修复设计 344
10.6.1 资源管理器概述 345
10.6.2 初步清理 346
10.6.3 声音文件数据库(缓存系统) 352
10.6.4 OpenAL声音源管理(预留和回收) 356
10.6.5 与Space Rocks!游戏的集成 360
10.6.6 处理所有可用的声音源都耗尽的情况 370
10.6.7 最后的润色 371
10.7 本章小结 373
第11章 3D音频——将声音变为游戏声音 375
11.1 OpenAL的设计:声音源、缓冲区和听者 375
11.2 OpenAL中3D音频的局限性 377
11.3 将听者整合进Space Rocks!游戏 378
11.3.1 创建听者类 378
11.3.2 挑选听者 379
11.4 在声音中添加位置 380
11.4.1 处理创建时的初始位置 382
11.4.2 禁用距离衰减 383
11.5 听者朝向 384
11.5.1 右手坐标系统和右手定则 385
11.5.2 单位圆、极坐标转换直角坐标、相位平移和三角恒等式 386
11.5.3 集成至Space Rocks!游戏 388
11.6 声音源方向和圆锥 389
11.6.1 内圆锥、外圆锥和过渡区 390
11.6.2 实现 391
11.7 速度和多普勒效应 392
11.7.1 速度和缩放因子 393
11.7.2 多普勒效应示例 394
11.8 距离衰减 396
11.8.1 衰减模型 396
11.8.2 回到Space Rocks!游戏 401
11.9 使用相对声音属性选择性的禁用3D效果 404
11.10 本章小结 406
第12章 流式媒体 409
12.1 音乐与其他音频 409
12.2 iPod音乐库(Media Player框架) 411
12.2.1 在Space Rocks!游戏中播放iPod音乐 413
12.2.2 添加媒体项选择器 415
12.2.3 摇晃(简易的加速度传感器摇晃检测) 417
12.3 音频流式处理 418
12.3.1 基于AVFoundation的Space Rocks!游戏背景音乐 419
12.3.2 OpenAL缓冲区队列介绍 424
12.3.3 基于OpenAL的SpaceRocks!游戏背景音乐 432
12.3.4 Space Rocks!游戏的OpenAL语音 445
12.3.5 基于音频队列服务的SpaceRocks!游戏背景音乐 454
12.3.6 完美的全连 456
12.4 音频捕捉 456
12.4.1 音频捕捉API 457
12.4.2 AVFoundation:使用AVAudioRecorder录制到文件 458
12.4.3 OpenAL:捕捉示波器 463
12.5 回到OpenGL 468
12.5.1 顶点缓冲区对象 469
12.5.2 有关OpenGL和OpenAL优化的注意 470
12.6 本章小结 471
第13章 iPhone游戏联网简介 473
13.1 了解网络 473
13.1.1 网络接口 473
13.1.2 TCP/IP 474
13.1.3 Bonjour 475
13.2 iPhone SDK和联网 475
13.2.1 套接字和连接 475
13.2.2 BSD套接字 API 476
13.2.3 CFNetwork 476
13.2.4 NSNetServices 476
13.2.5 GameKit 476
13.3 本章小结 477
第14章 对战游戏 479
14.1 见识Pong 479
14.2 使用Peer选择器寻找一个人类对手 480
14.2.1 运行界面 484
14.2.2 工作原理 487
14.3 建立连接 487
14.4 发送和接收消息 491
14.4.1 投掷骰子 492
14.4.2 准备好,继续 500
14.4.3 击球和失球 501
14.4.4 让板子活跃起来 510
14.5 游戏结束:处理断开连接 515
14.6 本章小结 516
第15章 多人游戏 517
15.1 8乘以3等于几 517
15.1.1 起始点 517
15.1.2 目标 519
15.1.3 结构 519
15.2 创建连接 521
15.2.1 连接对象和流对象的简介 521
15.2.2 连接初始化 522
15.2.3 关闭和清理 524
15.2.4 读取数据 524
15.2.5 写入数据 527
15.2.6 处理流事件 528
15.2.7 完整画面 529
15.3 套接字服务器 529
15.3.1 SocketServer类 530
15.3.2 套接字服务器初始化 531
15.3.3 通过Bonjour发布服务 534
15.3.4 开始和停止 534
15.4 通过Bonjour查找服务 536
15.4.1 查找服务器 536
15.4.2 连接至服务器 538
15.4.3 最后的细节 540
15.5 实现游戏客户端 544
15.5.1 跟踪逻辑 544
15.5.2 选择网络消息的格式 546
15.5.3 实现通信 548
15.5.4 整合起来 551
15.6 实现游戏服务器 552
15.6.1 管理玩家 552
15.6.2 代码整合 555
15.6.3 初始化 561
15.6.4 玩家加入和离开 561
15.6.5 开始和结束游戏回合 563
15.6.6 收集和处理答案 565
15.6.7 整合起来 566
15.7 本章小结 566
第16章 连接Internet 567
16.1 挑战 567
16.1.1 不能使用Bonjour 567
16.1.2 不能通过GameKit实现点到点的游戏 568
16.1.3 服务器中断 568
16.1.4 滞后 568
16.1.5 数据格式问题 569
16.1.6 其他问题 569
16.2 在线游戏基础知识 570
16.2.1 客户端服务器游戏 570
16.2.2 不通过Bonjour连接到游戏服务器 571
16.2.3 点到点的游戏 571
16.2.4 有关重新开发 572
16.2.5 沧海一粟 573
16.3 引入社交元素 573
16.3.1 在线共享最高得分 573
16.3.2 虚拟追击 574
16.3.3 聊天 575
16.4 本章小结 575
第17章 整合一切,享受乐趣 577
17.1 本书涵盖的内容 577
17.2 一些游戏设计的技巧 578
17.3 本章小结 578