目 录
第1章 Android,后起之秀 / 1
1.1 Android简介 / 1
1.2 版本分裂 / 3
1.3 谷歌的角色 / 3
1.3.1 Android开源项目 / 3
1.3.2 Android Market / 4
1.3.3 挑战赛、设备播种计划和谷歌I/O / 4
1.4 Android的功能和体系结构 / 5
1.4.1 内核 / 6
1.4.2 运行库和Dalvik虚拟机 / 6
1.4.3 系统库 / 7
1.4.4 应用程序框架 / 8
1.5 软件开发工具包 / 8
1.6 开发人员社区 / 9
1.7 设备,设备,设备 / 9
1.7.1 硬件 / 9
1.7.2 设备的范围 / 10
1.8 所有设备之间的兼容性 / 15
1.9 不同的手机游戏 / 15
1.9.1 人手一台游戏机 / 16
1.9.2 随时上网 / 16
1.9.3 普通用户与游戏迷 / 17
1.9.4 市场很大,开发人员很少 / 17
1.10 小结 / 18
第2章 从Android SDK开始 / 19
2.1 搭建开发环境 / 19
2.1.1 安装JDK / 20
2.1.2 安装Android SDK / 20
2.1.3 安装Eclipse / 21
2.1.4 安装ADT Eclipse插件 / 22
2.1.5 Eclipse快速浏览 / 23
2.1.6 一些实用的Eclipse快捷键 / 24
2.2 Android环境下的Hello World / 25
2.2.1 创建项目 / 25
2.2.2 进一步分析项目 / 26
2.2.3 编写应用程序代码 / 27
2.3 运行和调试Android应用程序 / 29
2.3.1 连接设备 / 29
2.3.2 创建一个Android虚拟设备 / 29
2.3.3 运行应用程序 / 30
2.3.4 调试应用程序 / 32
2.3.5 LogCat和DDMS / 34
2.3.6 使用ADB / 36
2.4 小结 / 37
第3章 游戏开发基础 / 39
3.1 游戏类型 / 39
3.1.1 休闲游戏 / 40
3.1.2 益智游戏 / 41
3.1.3 动作和街机游戏 / 42
3.1.4 塔防游戏 / 44
3.1.5 创新 / 45
3.2 游戏设计:笔比代码更强大 / 46
3.2.1 游戏的核心机制 / 46
3.2.2 一个故事和一种艺术风格 / 47
3.2.3 画面和切换 / 48
3.3 代码:具体细节 / 52
3.3.1 应用程序和窗口管理 / 52
3.3.2 输入 / 53
3.3.3 文件I/O / 56
3.3.4 音频 / 57
3.3.5 图形 / 60
3.3.6 游戏框架 / 69
3.4 小结 / 75
第4章 面向游戏开发人员的Android / 77
4.1 定义一个Android应用程序:清单文件 / 77
4.1.1 <manifest>元素 / 78
4.1.2 <application>元素 / 79
4.1.3 <activity>元素 / 80
4.1.4 <uses-permission>元素 / 82
4.1.5 <uses-feature>元素 / 83
4.1.6 <uses-sdk>元素 / 84
4.1.7 10个简单步骤建立Android游戏项目 / 84
4.1.8 市场过滤器 / 86
4.1.9 定义游戏图标 / 87
4.2 Android API基础 / 87
4.2.1 创建测试项目 / 88
4.2.2 活动的生命周期 / 91
4.2.3 处理输入设备 / 96
4.2.4 文件处理 / 110
4.2.5 音频编程 / 116
4.2.6 播放音效 / 116
4.2.7 音乐流 / 119
4.2.8 基本图形编程 / 122
4.3 最佳实践 / 143
4.4 小结 / 144
第5章 Android游戏开发框架 / 145
5.1 制定计划 / 145
5.2 AndroidFileIO类 / 146
5.3 AndroidAudio、AndroidSound和AndroidMusic / 147
5.4 AndroidInput和Accelerometer-Handler / 152
5.4.1 AccelerometerHandler:手机哪一面朝上 / 152
5.4.2 CompassHandler / 153
5.4.3 Pool类:重用相当有用 / 154
5.4.4 KeyboardHandler / 156
5.4.5 触摸处理程序 / 160
5.4.6 AndroidInput:优秀的协调者 / 167
5.5 AndroidGraphics和AndroidPixmap / 169
5.5.1 处理不同屏幕大小和分辨率的问题 / 169
5.5.2 AndroidPixmap:人物的像素 / 174
5.5.3 AndroidGraphics:满足绘图需求 / 174
5.5.4 AndroidFastRenderView / 178
5.6 AndroidGame:合并所有内容 / 180
5.7 小结 / 184
第6章 Mr. Nom入侵Android / 185
6.1 创建资源 / 185
6.2 建立项目 / 187
6.3 MrNomGame:主要活动 / 187
6.3.1 资源:便捷的资源存储 / 188
6.3.2 设置:跟踪用户的选项设置和高分榜 / 189
6.3.3 LoadingScreen:从磁盘获取资源 / 191
6.4 主菜单画面 / 192
6.5 HelpScreen类 / 195
6.6 高分榜画面显示 / 197
6.6.1 渲染数字 / 198
6.6.2 画面的实现 / 199
6.7 抽象 / 201
6.7.1 抽象Mr. Nom的世界:模型、视图、控制器 / 201
6.7.2 GameScreen类 / 211
6.8 小结 / 218
第7章 OpenGL ES介绍 / 219
7.1 OpenGL ES概述以及关注它的原因 / 219
7.1.1 编程模型:一个比喻 / 220
7.1.2 投影 / 221
7.1.3 规范化设备空间和视口 / 223
7.1.4 矩阵 / 223
7.1.5 渲染管道 / 224
7.2 开始之前 / 225
7.3 GLSurfaceView:从2008年开始,事情变得简单了 / 225
7.4 GLGame:实现游戏接口 / 228
7.5 绘制一个红色的三角形 / 235
7.5.1 定义视口 / 235
7.5.2 定义投影矩阵 / 235
7.5.3 指定三角形 / 238
7.5.4 综合示例 / 241
7.6 指定每个顶点的颜色 / 243
7.7 纹理映射:轻松地创建壁纸 / 246
7.7.1 纹理坐标 / 247
7.7.2 上传位图 / 248
7.7.3 纹理过滤 / 249
7.7.4 释放纹理 / 250
7.7.5 有用的代码片段 / 251
7.7.6 启用纹理 / 251
7.7.7 综合示例 / 251
7.7.8 Texture类 / 253
7.8 索引顶点:重用是有好处的 / 255
7.8.1 代码整合 / 256
7.8.2 Vertices类 / 258
7.9 半透明混合处理 / 260
7.10 更多图元:点、线、条和扇 / 263
7.11 2D变换:操作模型视图矩阵 / 264
7.11.1 世界空间和模型空间 / 264
7.11.2 再次讨论矩阵 / 265
7.11.3 第一个使用平移的示例 / 266
7.11.4 更多的变换 / 270
7.12 性能优化 / 273
7.12.1 测量帧率 / 273
7.12.2 Android 1.5平台下Hero的奇特案例 / 275
7.12.3 使OpenGL ES渲染如此慢的原因 / 275
7.12.4 移除不必要的状态改变 / 276
7.12.5 减小纹理大小意味着需要获取更少的像素 / 278
7.12.6 减少OpenGL ES/JNI方法的调用 / 278
7.12.7 绑定顶点的概念 / 279
7.12.8 写在结束之前 / 282
7.13 小结 / 283
第8章 2D游戏编程技巧 / 285
8.1 写在开始 / 285
8.2 向量 / 286
8.2.1 使用向量 / 286
8.2.2 一点三角学的知识 / 288
8.2.3 实现一个向量类 / 289
8.2.4 一个简单的用法示例 / 292
8.3 2D物理定律浅析 / 296
8.3.1 牛顿和欧拉,永远的好朋友 / 296
8.3.2 力和质量 / 297
8.3.3 理论上的运动 / 298
8.3.4 运动的实现 / 299
8.4 2D碰撞检测和对象表示 / 302
8.4.1 边界形状 / 303
8.4.2 构造边界形状 / 304
8.4.3 游戏对象的属性 / 306
8.4.4 宽阶段和窄阶段碰撞检测 / 307
8.4.5 一个详细的示例 / 313
8.5 2D照相机 / 324
8.5.1 Camera2D类 / 327
8.5.2 示例 / 328
8.6 纹理图集 / 329
8.7 纹理区域、精灵和批处理:隐藏OpenGL ES / 334
8.7.1 TextureRegion类 / 334
8.7.2 SpriteBatcher类 / 335
8.8 精灵动画 / 343
8.8.1 Animation类 / 344
8.8.2 示例 / 345
8.9 小结 / 348
第9章 Super Jumper:一个2DOpenGL ES游戏 / 351
9.1 核心游戏机制 / 351
9.2 背景故事和艺术风格 / 352
9.3 画面和切换 / 352
9.4 定义游戏世界 / 353
9.5 创建资源 / 355
9.5.1 UI元素 / 355
9.5.2 使用点阵字体处理文本 / 356
9.5.3 游戏元素 / 358
9.5.4 用于救援的纹理图集 / 359
9.5.5 音乐与音效 / 360
9.6 实现Super Jumper / 361
9.6.1 Assets类 / 361
9.6.2 Settings类 / 364
9.6.3 主活动 / 366
9.6.4 Font类 / 367
9.6.5 GLScreen / 369
9.6.6 主菜单画面 / 369
9.6.7 帮助画面 / 372
9.6.8 高分画面 / 374
9.6.9 模拟类 / 377
9.6.10 游戏画面 / 390
9.6.11 WorldRenderer类 / 397
9.7 是否需要优化 / 401
9.8 小结 / 402
第10章 OpenGL ES:进入3D世界 / 403
10.1 准备工作 / 403
10.2 3D中的顶点 / 404
10.2.1 Vertices3:存储3D空间位置 / 404
10.2.2 示例 / 406
10.3 透视投影:越近则越大 / 409
10.4 z-buffer:化混乱为有序 / 411
10.4.1 完善上一个例子 / 412
10.4.2 混合:身后空无一物 / 413
10.4.3 z-buffer精度与z-fighting / 416
10.5 定义3D网格 / 417
10.5.1 立方体:3D中的“HelloWorld” / 417
10.5.2 一个示例 / 419
10.6 矩阵和变换 / 422
10.6.1 矩阵堆栈 / 423
10.6.2 用矩阵堆栈实现分层系统 / 425
10.6.3 木箱太阳系的简单实例 / 425
10.7 小结 / 433
第11章 3D编程技巧 / 435
11.1 准备工作 / 435
11.2 3D中的向量 / 436
11.3 OpenGL ES中的光照 / 440
11.3.1 光照的工作机制 / 440
11.3.2 光源 / 441
11.3.3 材质 / 442
11.3.4 OpenGL ES中如何对光照过程进行运算:顶点法线 / 442
11.3.5 实践 / 443
11.3.6 关于OpenGL ES中光照应用的一些建议 / 456
11.4 材质变换(Mipmapping) / 456
11.5 简单的照相机 / 460
11.5.1 第一人称照相机或欧拉照相机 / 460
11.5.2 一个欧拉照相机的示例 / 463
11.5.3 跟随照相机 / 468
11.6 加载模块 / 470
11.6.1 Wavefront OBJ格式 / 470
11.6.2 OBJ加载器的实现 / 471
11.6.3 使用OBJ加载器 / 475
11.6.4 关于加载模型的一些建议 / 475
11.7 3D中的一些物理知识 / 476
11.8 碰撞检测与3D中的对象表达法 / 477
11.8.1 3D中的边界形状 / 477
11.8.2 边界球重叠测试 / 477
11.8.3 GameObject3D与Dynamic-GameObject3D / 478
11.9 小结 / 479
第12章 Droid Invaders游戏 / 481
12.1 游戏的核心机制 / 481
12.2 游戏的故事背景与艺术风格 / 483
12.3 屏幕与场景切换 / 483
12.4 定义游戏世界 / 484
12.5 创建资源 / 485
12.5.1 用户界面的资源 / 485
12.5.2 游戏资源 / 486
12.5.3 音效与音乐 / 488
12.6 开始编写代码 / 488
12.7 Assets类 / 489
12.8 Settings类 / 492
12.9 主活动 / 493
12.10 主菜单 / 494
12.11 游戏设置画面 / 496
12.12 模拟类 / 499
12.12.1 Shield类 / 499
12.12.2 Shot类 / 500
12.12.3 Ship类 / 500
12.12.4 Invader类 / 502
12.12.5 World类 / 505
12.13 GameScreen类 / 510
12.14 WorldRender类 / 516
12.15 游戏优化 / 521
12.16 小结 / 522
第13章 发布游戏 / 523
13.1 关于测试 / 523
13.2 成为注册开发人员 / 524
13.3 给游戏的APK包签名 / 524
13.4 将游戏发布至Market / 527
13.4.1 上传资源 / 527
13.4.2 产品详情 / 528
13.4.3 发布选项 / 528
13.4.4 发布 / 529
13.4.5 市场推广 / 529
13.5 开发人员控制台 / 529
13.6 小结 / 530
第14章 进阶内容 / 531
14.1 社交网络 / 531
14.2 位置识别 / 531
14.3 多玩家功能 / 532
14.4 OpenGL ES 2.0以及更多内容 / 532
14.5 框架及引擎 / 532
14.6 网络资源 / 534
14.7 结束语 / 534
