图书目录

目    录

第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