第1章 Android简介 1
1.1 Android概述 1
1.2 Android SDK 1
1.2.1 Android软件开发工具包(SDK)的需求条件 1
1.2.2 Android SDK组件 2
1.2.3 配置开发环境 5
1.2.4 Android开发工具集成开发环境 6
1.3 “Hello World”示例程序 11
1.3.1 创建新的Android项目 11
1.3.2 Android模拟器 16
1.3.3 真实的Android设备 18
1.3.4 主源代码 19
1.3.5 图形布局 20
1.3.6 实际的“Hello World”数据 22
1.4 本章小结 22
第2章 Android中的Java语言 23
2.1 Java语言概述 23
2.2 Java注释 23
2.3 Java基本数据类型 24
2.3.1 数组 24
2.3.2 数据修饰符 24
2.4 Java运算符 25
2.4.1 算术运算符 25
2.4.2 一元运算符 26
2.4.3 条件运算符 26
2.4.4 位运算符和移位运算符 26
2.5 Java流控制语句 27
2.6 Java类 28
2.6.1 包和类 28
2.6.2 访问包中的类 28
2.6.3 Java接口 29
2.6.4 访问类变量和函数 29
2.7 Java函数 30
2.8 基本的Android Java程序框架 31
2.8.1 Activity类的生命周期 31
2.8.2 Activity类生命周期的关键点 32
2.8.3 查看Activity的生命周期 32
2.9 基本的Android Java OpenGL框架 34
2.9.1 单视图OpenGL ES应用程序 34
2.9.2 OpenGL ES多视图应用程序 37
2.10 3D OpenGL“Hello Droid”示例 40
2.10.1 将项目示例导入Eclipse中 40
2.10.2 MainActivity和MyGLSurfaceView类 40
2.10.3 MyGLRenderer类 42
2.10.4 类概述 46
2.10.5 体验“Hello Droid”示例程序 47
2.11 本章小结 49
第3章 3D数学知识 51
3.1 向量和向量操作 51
3.1.1 向量的含义 51
3.1.2 Vector类 54
3.1.3 向量的模 54
3.1.4 向量的标准化 55
3.1.5 向量加法 55
3.1.6 向量乘法 56
3.1.7 向量逆置 57
3.1.8 直角三角形 58
3.1.9 向量点积 58
3.2 矩阵和矩阵操作 60
3.2.1 矩阵的含义 60
3.2.2 Android内建Matrix类 61
3.2.3 单位矩阵 61
3.2.4 矩阵转置 61
3.2.5 矩阵乘法 62
3.2.6 逆矩阵 63
3.2.7 齐次坐标 63
3.2.8 使用矩阵平移对象 63
3.2.9 使用矩阵旋转对象 64
3.2.10 使用矩阵缩放对象 65
3.2.11 组合矩阵 65
3.3 操控3D空间中的对象 66
3.3.1 构建3D对象的模型矩阵 66
3.3.2 向对象中添加旋转行为 68
3.3.3 在3D空间中移动对象 69
3.3.4 缩放对象 71
3.4 本章小结 72
第4章 基于OpenGL ES的3D图形学 73
4.1 Android上的OpenGL ES 73
4.1.1 OpenGL对象渲染 73
4.1.2 渲染过程 74
4.2 OpenGL ES着色语言 80
4.2.1 基本数据类型 80
4.2.2 向量分量 81
4.2.3 运算符和表达式 81
4.2.4 程序流控制语句 82
4.2.5 存储限定符 83
4.2.6 保留变量 84
4.2.7 内置函数 84
4.3 顶点着色器 85
4.4 片元或像素着色器 86
4.5 Shader类 87
4.6 相机 94
4.7 3D对象网格 100
4.7.1 网格顶点数据 100
4.7.2 MeshEx类 101
4.8 光照机制 107
4.8.1 光照机制概述 107
4.8.2 PointLight类 108
4.8.3 构建法线矩阵 111
4.8.4 顶点着色器中的光照 112
4.8.5 片元着色器光照 115
4.9 材质 116
4.9.1 Material类 117
4.9.2 片元着色器中的材质 117
4.10 纹理 118
4.10.1 纹理放大和缩小 118
4.10.2 纹理剪裁和重复 119
4.10.3 Texture类 120
4.10.4 顶点着色器中的纹理 122
4.10.5 片元着色器中的纹理 123
4.11 本章小结 123
第5章 运动和碰撞 125
5.1 运动行为概述 125
5.1.1 线性速度和角加速度 125
5.1.2 牛顿运动定律 126
5.1.3 重力 127
5.1.4 角速度和角加速度 127
5.1.5 旋转作用力 128
5.2 Physics类 129
5.3 基于作用力的线性运动和角运动示例 135
5.3.1 创建4面纹理立方体 135
5.3.2 调整Object3d类 136
5.3.3 调整MyGLRenderer类 137
5.4 碰撞行为概述 139
5.4.1 碰撞检测 139
5.4.2 调整MeshEx类 140
5.4.3 调整Object3d类 143
5.4.4 碰撞类型 144
5.4.5 调整Physics类 145
5.4.6 碰撞计算 149
5.4.7 最终的Physics类 150
5.5 碰撞计算示例 151
5.5.1 调整MyGLRenderer类 151
5.5.2 牛顿万有引力定律 154
5.6 使用顶点着色器创建重力网格 155
5.6.1 修改Physics类 155
5.6.2 修改MeshEx类 155
5.6.3 GravityGridEx类 156
5.6.4 创建新的顶点着色器 167
5.6.5 调整MyGLRenderer类 170
5.7 本章小结 175
第6章 游戏环境 177
6.1 Android中的声音 177
6.1.1 Sound类 177
6.1.2 调整Object3d类 178
6.2 音效示例 180
6.3 HUD概述 184
6.3.1 HUD 184
6.3.2 创建BillBoard类 185
6.3.3 创建BillBoardFont类 188
6.3.4 调整Texture类 189
6.3.5 创建BillBoardCharacterSet类 189
6.3.6 创建HUDItem类 194
6.3.7 创建HUD类 196
6.3.8 调整Object3d类 202
6.4 HUD创建示例 203
6.5 数据持久化 212
6.5.1 调整Orientation类 213
6.5.2 调整Physics类 214
6.5.3 调整Object3d类 214
6.6 保存持久化数据 214
6.6.1 调整MyGLRenderer类 214
6.6.2 调整MyGLSurfaceView类 216
6.6.3 调整MainActivity类 217
6.7 本章小结 217
第7章 创建玩家角色 219
7.1 创建玩家图形 219
7.1.1 创建Mesh类 219
7.1.2 调整Object3d类 220
7.1.3 调整使用Object3d类的其他类 222
7.1.4 创建Pyramid类 223
7.1.5 创建PowerPyramid类 224
7.2 创建玩家的视点和输入 225
7.2.1 调整MyGLRenderer类 226
7.2.2 调整MyGLSurfaceView类 228
7.3 创建玩家的武器和弹药 229
7.4 创建爆炸效果 239
7.4.1 创建PolyParticleEx类 239
7.4.2 创建SphericalPolygonExplosion类 244
7.4.3 调整Object3d类 252
7.5 生成游戏对象的统计数据 253
7.5.1 创建Stats类 253
7.5.2 调整Object3d类 255
7.6 射击目标 256
7.6.1 创建玩家的武器系统 259
7.6.2 处理碰撞问题 263
7.6.3 调整onDrawFrame()函数 265
7.7 本章小结 268
第8章 创建敌方角色 269
8.1 创建Arena对象 269
8.2 人工智能概述 273
8.3 创建坦克敌方角色 275
8.3.1 创建坦克图形 275
8.3.2 创建坦克状态 276
8.3.3 创建车辆命令 278
8.3.4 创建坦克状态并处理命令 284
8.3.5 创建车辆的转向类 286
8.3.6 创建坦克的巡逻/攻击状态 288
8.3.7 创建坦克对象的有限状态机 299
8.3.7 创建坦克对象的Driver类 303
8.3.9 调整Physics类 307
8.3.10 调整Object3d类 309
8.3.11 创建坦克对象 310
8.4 ArenaObject3d类和Tank类 318
8.5 本章小结 326
第9章 用户界面 327
9.1 创建主菜单系统 327
9.1.1 MenuItem类 327
9.1.2 MainMenu类 329
9.2 创建高分榜 332
9.2.1 HighScoreEntry类 332
9.2.2 HighScoreTable类 334
9.3 创建高分输入系统 342
9.4 用户界面示例 350
9.5 本章小结 360
第10章 最终的Drone Grid游戏 361
10.1 组织和控制敌方角色分组 361
10.1.1 ArenaObjectSet类 361
10.1.2 TankFleet类 372
10.2 GamePlayController类 376
10.3 保存和加载游戏状态 385
10.3.1 调整MainActivity类 386
10.3.2 调整MyGLRenderer类 386
10.4 根据游戏结束状态添加游戏 388
10.5 Drone Grid游戏示例 392
10.6 本章小结 404
第11章 Android原生开发工具包(NDK) 405
11.1 NDK概述 405
11.2 NDK系统需求条件 405
11.3 Android平台兼容性 406
11.4 安装Android NDK 406
11.5 Android NDK的使用方式 407
11.6 Java本地接口概述 407
11.6.1 Java接口指针 408
11.6.2 加载和链接本地C/C++方法 408
11.6.3 命名的本地函数 409
11.6.4 本地函数参数 409
11.6.5 C/C++本地函数格式 410
11.6.6 本地类型 410
11.6.7 引用类型 410
11.6.8 JNI签名类型 411
11.6.9 调用Java中的本地代码并访问本地代码中的Java方法 412
11.6.10 JNI函数 413
11.7 Android JNI Makefile 414
11.8 基于JNI和本地代码的“Hello World”示例 415
11.9 向Drone Grid游戏中添加本地函数 419
11.9.1 计算本地代码中的重力 419
11.9.2 从本地代码中旋转对象 420
11.9.3 从本地代码中计算碰撞的反作用力 424
11.10 本章小结 428
第12章 游戏的发布和市场化运作 429
12.1 创建最终的发布文件 429
12.2 测试.apk发布文件 432
12.3 Android市场和策略列表 435
12.3.1 Google Play 435
12.3.2 Amazon Appstore 435
12.3.3 Samsung Apps Store 436
12.3.4 Aptoide 436
12.3.5 Appitalism 436
12.3.6 GetJar 437
12.3.7 SlideMe 437
12.3.8 Soc.Io Mall 437
12.3.9 用户自己的网站 437
12.4 Android广告网络列表 438
12.4.1 AppFlood 438
12.4.2 Appwiz 439
12.4.3 LeadBolt 439
12.4.4 AppBucks 440
12.4.5 AdMob 441
12.4.6 StartApp 442
12.4.7 其他广告网络和营销公司 444
12.5 Android游戏评论网站 447
12.6 其他有用的网站 452
12.7 本章小结 452