第1章 日益流行的Android 1
1.1Android简介 1
1.2版本分裂 3
1.3谷歌的角色 3
1.3.1 Android开源项目 4
1.3.2 GooglePlay 4
1.3.3谷歌I/O 4
1.4 Android的功能和体系结构 5
1.4.1内核 5
1.4.2运行库和Dalvik虚拟机 6
1.4.3系统库 6
1.4.4应用程序框架 7
1.5软件开发工具包 7
1.6开发人员社区 8
1.7设备,设备,设备 9
1.7.1硬件 9
1.7.2设备的范围 10
1.8所有设备之间的兼容性 13
1.9不同的手机游戏 14
1.9.1人手一台游戏机 14
1.9.2随时上网 14
1.9.3普通用户与游戏迷 15
1.9.4 市场很大,开发人员很少 15
1.10小结 16
第2章 从Android SDK开始 17
2.1搭建开发环境 17
2.1.1安装JDK 18
2.1.2安装Android SDK 18
2.1.3安装Eclipse 19
2.1.4安装ADT Eclipse插件 20
2.1.5 Eclipse快速浏览 21
2.1.6一些实用的Eclipse快捷键 22
2.2在Eclipse中新建项目及编写代码 23
2.2.1创建项目 23
2.2.2进一步分析项目 24
2.2.3使应用程序与所有Android版本兼容 25
2.2.4编写应用程序代码 25
2.3在设备或模拟器上运行应用程序 27
2.3.1连接设备 27
2.3.2创建一个Android虚拟设备 28
2.3.3安装高级模拟器功能 29
2.3.4运行应用程 31
2.4调试和分析应用程序 33
2.4.1 LogCat和DDMS 35
2.4.2使用ADB 37
2.5实用的第三方工具 38
2.6小结 39
第3章 游戏开发基础 41
3.1游戏类型 41
3.1.1休闲游戏 42
3.1.2益智游戏 43
3.1.3动作和街机游戏 44
3.1.4塔防游戏 46
3.1.5社交游戏 47
3.1.6游戏类型之外 48
3.2游戏设计:笔比代码更强大 49
3.2.1游戏的核心机制 49
3.2.2背景故事和艺术风格 50
3.2.3画面和切换 51
3.3代码:具体细节 55
3.3.1应用程序和窗口管理 55
3.3.2输入 56
3.3.3文件I/O 59
3.3.4音频 59
3.3.5图形 62
3.3.6游戏框架 71
3.4小结 77
第4章 面向游戏开发人员的Android 79
4.1定义一个Android应用程序:清单文件 79
4.1.1 <manifest>元素 80
4.1.2 <application>元素 81
4.1.3 <activity>元素 82
4.1.4 <uses-permission>元素 83
4.1.5 <uses-feature>元素 84
4.1.6 <uses-sdk>元素 86
4.1.7 8个简单步骤建立Android游戏项目 86
4.1.8 Google Play过滤器 87
4.1.9定义游戏图标 88
4.2针对有iOS/Xcode背景的读者 89
4.2.1 Eclipse/ADT和Xcode的对比 89
4.2.2查找和配置你的目标 89
4.2.3其他有用的东西 90
4.3 Android API基础 90
4.3.1创建测试项目 91
4.3.2活动的生命周期 94
4.3.3处理输入设备 99
4.3.4文件处理 113
4.3.5音频编程 119
4.3.6播放音效 120
4.3.7音乐流 122
4.3.8基本图形编程 126
4.4最佳实践 146
4.5小结 146
第5章 Android游戏开发框架 147
5.1制定计划 147
5.2 AndroidFileIO类 147
5.3 AndroidAudio、AndroidSound和AndroidMusic 149
5.4 AndroidInput和AccelerometerHandler 153
5.5 CompassHandler 155
5.5.1Pool类:重用相当有用 156
5.5.2KeyboardHandler 158
5.5.3触摸处理程序 162
5.5.4AndroidInput:优秀的协调者 168
5.6 AndroidGraphics和AndroidPixmap 170
5.6.1处理不同屏幕大小和分辨率的问题 170
5.6.2 AndroidPixmap 174
5.6.3 AndroidGraphics:满足绘图需求 175
5.6.4 AndroidFastRenderView 179
5.7 AndroidGame:合并所有内容 181
5.8小结 185
第6章 Mr.Nom入侵Android 187
6.1创建资源 187
6.2建立项目 189
6.3 MrNomGame:主活动 189
6.3.1资源:便捷的资源存储 190
6.3.2设置:跟踪用户的选项设置和高分榜 191
6.3.3 LoadingScrean:从磁盘获取资源 193
6.4主菜单画面 194
6.5HelpScreen类 197
6.6高分榜画面 199
6.6.1渲染数字 199
6.6.2画面的实现 201
6.7抽象Mr.Nom的世界:模型、视图、控制器 203
6.7.1 Stain类 204
6.7.2 Snake和SnakePart类 205
6.7.3 World类 208
6.8GameScreen类 212
6.9小结 219
第7章 OpenGL ES介绍 221
7.1OpenGL ES概述以及关注它的原因 221
7.1.1编程模型:一个比喻 222
7.1.2投影 223
7.1.3规范化设备空间和视口 225
7.1.4矩阵 225
7.1.5渲染管道 226
7.2准备工作 227
7.3 GLSurfaceView:从2008年开始,事情变得简单了 227
7.4 GLGame:实现游戏接口 230
7.5绘制一个红色的三角形 236
7.5.1定义视口 236
7.5.2定义投影矩阵 237
7.5.3指定三角形 239
7.5.4综合示例 242
7.6指定每个顶点的颜色 245
7.7纹理映射:轻松地创建壁纸 248
7.7.1纹理坐标 248
7.7.2上传位图 249
7.7.3纹理过滤 250
7.7.4释放纹理 251
7.7.5有用的代码片段 252
7.7.6启用纹理 252
7.7.7综合示例 252
7.7.8 Texture类 254
7.8索引顶点:重用是有好处的 256
7.8.1代码整合 258
7.8.2 Vertices类 259
7.9半透明混合处理 262
7.10更多图元:点、线、条和扇 264
7.11 2D变换:操作模型视图矩阵 265
7.11.1世界空间和模型空间 266
7.11.2再次讨论矩阵 267
7.11.3第一个使用平移的示例 267
7.11.4更多的变换 271
7.12性能优化 274
7.12.1 测量帧率 274
7.12.2 Android 1.5平台下Hero的奇特案例 276
7.12.3造成OpenGL ES渲染如此慢的原因 276
7.12.4移除不必要的状态改变 277
7.12.5减小纹理大小意味着需要获取更少的像素 279
7.12.6减少OpenGL ES/JNI方法的调用 279
7.12.7绑定顶点的概念 280
7.12.8写在结束之前 283
7.13小结 284
第8章 2D游戏编程技巧 285
8.1准备工作 285
8.2向量 286
8.2.1使用向量 286
8.2.2一点三角学的知识 288
8.2.3实现一个向量类 289
8.2.4一个简单的用法示例 293
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边界形状 302
8.4.2构造边界形状 304
8.4.3游戏对象的属性 306
8.4.4宽阶段和窄阶段碰撞检测 306
8.4.5一个详细的示例 312
8.5 2D照相机 323
8.5.1 Camere2D类 326
8.5.2示例 327
8.6纹理图集 328
8.7纹理区域、精灵和批处理:隐藏OpenGL ES 333
8.7.1 TextureRegion类 333
8.7.2 SpriteBatcher类 334
8.8精灵动画 342
8.8.1 Animation类 342
8.8.2示例 343
8.9小结 347
第9章 Super Jumper:一个2D OpenGL ES游戏 349
9.1核心游戏机制 349
9.2背景故事和艺术风格 350
9.3画面和切换 350
9.4定义游戏世界 351
9.5创建资源 353
9.5.1UI元素 353
9.5.2使用点阵字体处理文本 354
9.5.3游戏元素 356
9.5.4纹理图集 357
9.5.5音乐与音效 358
9.6实现Super Jumper 359
9.6.1 Assets类 360
9.6.2 Settings类 362
9.6.3主活动 364
9.6.4 Font类 365
9.6.5 GLScreen类 366
9.6.6主菜单画面 367
9.6.7帮助画面 369
9.6.8高分画面 372
9.6.9模拟类 374
9.6.10游戏画面 387
9.6.11 WorldRenderer类 394
9.7是否需要优化 397
9.8小结 399
第10章 OpenGL ES:进入3D世界 401
10.1准备工作 401
10.2 3D中的顶点 402
10.2.1 Vertices3:存储3D空间位置 402
10.2.2示例 404
10.3透视投影:越近则越大 407
10.4m z-buffer:化混乱为有序 409
10.4.1完善上一个例子 410
10.4.2混合:身后空无一物 411
10.4.3 z-buffer精度与z-fighting 413
10.5定义3D网格 414
10.5.1立方体:3D中的“Hello World” 414
10.5.2一个示例 416
10.6矩阵和变换 419
10.6.1矩阵堆栈 419
10.6.2用矩阵堆栈实现分层系统 421
10.6.3一个简单的照相机系统 427
10.7小结 430
第11章 3D编程技巧 431
11.1准备工作 431
11.2 3D中的向量 432
11.3 OpenGL ES中的光照 436
11.3.1光照的工作机制 436
11.3.2光源 437
11.3.3材质 438
11.3.4 OpenGL ES中如何对光照过程进行运算:顶点法线 438
11.3.5实践 439
11.3.6关于OpenGL ES中光照应用的一些建议 451
11.4材质变换 452
11.5简单的照相机 456
11.5.1第一人称照相机或欧拉照相机 456
11.5.2一个欧拉照相机的示例 459
11.5.3跟随照相机 463
11.6加载模型 465
11.6.1 Wavefront OBJ格式 466
11.6.2 OBJ加载器的实现 466
11.6.3使用OBJ加载器 471
11.6.4关于加载模型的一些建议 471
11.7 3D中的一些物理知识 471
11.8 3D中的碰撞检测与对象表示 472
11.8.1 3D中的边界形状 472
11.8.2边界球重叠测试 473
11.8.3 GameObject3D与 DynamicGameObject3D 474
11.9小结 475
第12章 Android Invaders游戏 477
12.1游戏的核心机制 477
12.2故事背景与艺术风格 478
12.3画面与切换 479
12.4定义游戏世界 480
12.5创建资源 480
12.5.1用户界面资源 481
12.5.2游戏资源 482
12.5.3音效与音乐 483
12.6开始编写代码 483
12.7 Assets类 484
12.8 Settings类 487
12.9主活动 488
12.10主菜单画面 489
12.11游戏设置画面 491
12.12模拟类 494
12.12.1 Shield类 494
12.12.2 Shot类 494
12.12.3 Ship类 495
12.12.4 Invader类 497
12.12.5 World类 499
12.13 GameScreen类 505
12.14 WorldRender类 511
12.15 游戏优化 516
12.16小结 517
第13章 NDK原生编程 519
13.1 Android NDK的含义 519
13.2 Java原生接口 520
13.3安装NDK 521
13.4安装NDK Android项目 522
13.5创建Java原生方法 522
13.6创建C/C++头文件和实现 523
13.7构建共享库 525
13.8代码整合 527
13.9小结 532
第14章 营销和货币化 533
14.1将游戏货币化 533
14.1.1广告 534
14.1.2游戏内的产品 535
14.1.3虚拟货币 535
14.1.4卖还是不卖 536
14.1.5授权 536
14.2让你的游戏被发现 537
14.2.1社交网络集成 537
14.2.2发现服务 537
14.2.3博客和传统的网络媒体 538
14.3设计时就考虑盈利 538
14.4设计时就考虑被发现 539
14.5小结 539
第15章 发布游戏 541
15.1关于测试 541
15.2成为注册开发人员 542
15.3给游戏的APK签名 543
15.4将游戏发布至GooglePlay 545
15.4.1上传资源 545
15.4.2产品详情 546
15.4.3发布选项 547
15.4.4 APK文件管理 548
15.4.5发布 548
15.5开发人员控制台 549
15.6小结 549
第16章 进阶内容 551
16.1位置识别 551
16.2多玩家功能 551
16.3 OpenGL ES 2.0/3.0以及更多内容 551
16.4框架及引擎 552
16.5网络资源 553
16.6结束语 554