第一篇 Android游戏开发核心技术 2
第1章 Android平台简介 2
1.1 Android的来龙去脉 2
1.2 掀起Android的盖头来 2
1.2.1 选择Android的理由 2
1.2.2 Android的应用程序框架 3
1.3 Android开发环境的搭建 5
1.3.1 SDK的下载及安装 5
1.3.2 Eclipse集成开发环境的搭建 6
1.3.3 虚拟设备的创建与模拟器的运行 8
1.3.4 第一个Android程序 9
1.3.5 Android程序的监控与调试 12
1.4 小结 13
第2章 Android游戏开发中的前台渲染 14
2.1 创建Android用户界面 14
2.1.1 布局管理 14
2.1.2 常用控件及其事件处理 19
2.2 图形与动画在Android中的实现 21
2.2.1 简单图形的绘制 21
2.2.2 贴图的艺术 23
2.2.3 自定义动画的播放 24
2.3 Android平台下的多媒体开发 27
2.3.1 音频的播放 27
2.3.2 视频的播放 30
2.3.3 Camera图像采集 32
2.4 小结 34
第3章 Android游戏开发中的交互式通信 35
3.1 Android应用程序的基本组件 35
3.1.1 Activity组件 35
3.1.2 Service组件 37
3.1.3 Broadcast Receiver组件 38
3.1.4 Content Provider组件 39
3.1.5 AndroidManifest.xml文件简介 39
3.2 应用程序的内部通信 42
3.2.1 消息的处理者——Handler类简介 42
3.2.2 使用Handler进行内部通信 43
3.3 应用程序组件之间的通信 45
3.3.1 Intent类简介 45
3.3.2 应用程序组件——IntentFilter类简介 46
3.3.3 示例1:与Android系统组件通信 47
3.3.4 示例2:应用程序组件间通信示例Activity部分的开发 48
3.3.5 示例3:应用程序组件间通信示例Service部分的开发 50
3.4 小结 52
第4章 Android游戏开发中的数据存储和传感器 53
4.1 在Android平台上实现数据存储 53
4.1.1 私有文件夹文件的写入与读取 53
4.1.2 读取Resources和Assets中的文件 56
4.1.3 轻量级数据库SQLite简介 58
4.1.4 SQLite的使用示例 60
4.1.5 数据共享者——Content Provider的使用 63
4.1.6 简单的数据存储——Preferences的使用 67
4.2 Android平台下传感器应用的开发 68
4.2.1 基本开发步骤 69
4.2.2 光传感器 71
4.2.3 温度传感器 72
4.2.4 接近传感器 74
4.2.5 磁场传感器 75
4.2.6 加速度传感器 76
4.2.7 姿态传感器 81
4.3 小结 85
第5章 Android游戏开发中的网络编程 86
5.1 基于Socket套接字的网络编程 86
5.2 基于HTTP的网络编程 89
5.2.1 通过URL获取网络资源 89
5.2.2 在Android中解析XML 91
5.3 Android平台下的Google Map 91
5.3.1 准备工作 91
5.3.2 简单的案例 94
5.4 蓝牙通信 98
5.4.1 基础知识 98
5.4.2 简单的案例 98
5.5 小结 109
第6章 不一样的游戏,一样的精彩应用 110
6.1 射击类游戏 110
6.1.1 游戏玩法 110
6.1.2 视觉效果 110
6.1.3 游戏内容设计 111
6.2 竞速类游戏 111
6.2.1 游戏玩法 111
6.2.2 视觉效果 112
6.2.3 游戏内容设计 112
6.3 益智类游戏 112
6.3.1 游戏玩法 113
6.3.2 视觉效果 113
6.3.3 游戏内容设计 113
6.4 角色扮演游戏 114
6.4.1 游戏玩法 114
6.4.2 视觉效果 114
6.4.3 游戏内容设计 115
6.5 闯关动作类游戏 115
6.5.1 游戏玩法 115
6.5.2 视觉效果 116
6.5.3 游戏内容设计 116
6.6 冒险游戏 116
6.6.1 游戏玩法 116
6.6.2 视觉效果 117
6.6.3 游戏内容设计 117
6.7 策略游戏 118
6.7.1 游戏玩法 118
6.7.2 视觉效果 118
6.7.3 游戏内容设计 119
6.8 养成类游戏 119
6.8.1 游戏玩法 119
6.8.2 视觉效果 119
6.8.3 游戏内容设计 120
6.9 经营类游戏 120
6.9.1 游戏玩法 121
6.9.2 视觉效果 121
6.9.3 游戏内容设计 121
6.10 体育类游戏 121
6.10.1 游戏玩法 121
6.10.2 视觉效果 122
6.10.3 游戏内容设计 122
6.11 小结 122
第7章 游戏背后的数学与物理 123
7.1 编程中经常用到的数理知识 123
7.1.1 数学方面 123
7.1.2 物理方面 125
7.2 物理小球在游戏中的应用 125
7.2.1 开发运动体Movable类的代码 126
7.2.2 开发物理引擎BallThread类的代码 127
7.2.3 视图类——开发BallView类的代码 130
7.2.4 绘制线程——开发DrawThread类的代码 133
7.2.5 开发Activity部分的代码 134
7.3 粒子系统 135
7.3.1 粒子对象类——开发粒子对象Particle类和粒子集合ParticleSet类 135
7.3.2 开发焰火粒子系统的物理引擎ParticleThread类的代码 137
7.3.3 视图类——开发视图类ParticleView及其相关类 138
7.3.4 开发程序Activity部分的代码 140
7.3.5 将焰火粒子系统改为瀑布粒子系统 140
7.4 碰撞检测技术 141
7.4.1 碰撞检测技术基础 142
7.4.2 游戏中实体对象之间的碰撞检测 143
7.4.3 游戏实体对象与环境之间的碰撞检测 145
7.5 用粒子系统模拟流体 146
7.5.1 基本原理 146
7.5.2 一个简单的案例 148
7.5.3 通过将物理计算并行化提高效率 152
7.6 小结 153
第8章 游戏地图必知必会 154
8.1 两种不同单位形状的地图 154
8.1.1 正方形地图 154
8.1.2 正方形地图案例 156
8.1.3 正六边形地图 157
8.1.4 正六边形地图案例 159
8.1.5 正方形地图和正六边形地图的比较 161
8.2 正六边形地图路径搜索 161
8.2.1 路径搜索示例基本框架的搭建 161
8.2.2 深度优先路径搜索DFS 166
8.2.3 广度优先路径搜索BFS 168
8.2.4 路径搜索算法——Dijkstra 170
8.2.5 用A算法优化算法 173
8.3 地图编辑器与关卡设计 175
8.3.1 关卡地图的重要性 176
8.3.2 图片分割界面的实现 177
8.3.3 地图设计界面的实现 181
8.4 小结 186
第9章 游戏开发小秘技 187
9.1 有限状态机 187
9.1.1 何为有限状态机 187
9.1.2 有限状态机的简单实现 188
9.1.3 有限状态机的OO实现 192
9.2 游戏中的模糊逻辑 194
9.2.1 模糊的才是真实的 194
9.2.2 如何在Android中将游戏模糊化 195
9.3 游戏的基本优化技巧 197
9.3.1 代码上的小艺术 197
9.3.2 Android中的查找表技术 198
9.3.3 游戏的感觉和性能问题 200
9.4 小结 201
第10章 游戏的心脏——物理引擎 202
10.1 物理引擎很重要 202
10.1.1 什么是物理引擎 202
10.1.2 常见的物理引擎 202
10.2 2D的王者JBox2D 204
10.2.1 基本的物理学概念 205
10.2.2 JBox2D中常用类的介绍 206
10.3 球体撞击木块金字塔案例 210
10.3.1 案例运行效果 211
10.3.2 案例的基本框架结构 211
10.3.3 常量类——Constant 212
10.3.4 抽象类——MyBody 212
10.3.5 圆形刚体类——MyCircleColor 213
10.3.6 生成刚体形状的工具类——Box2DUtil 213
10.3.7 颜色工具类——ColorUtil 215
10.3.8 主控制类——MyBox2dActivity 215
10.3.9 显示界面类——GameView 217
10.3.10 绘制线程类——DrawThread 218
10.4 简易打砖块案例 219
10.4.1 一般碰撞版 219
10.4.2 碰撞后消失版 221
10.5 旋转关节跷跷板案例 225
10.5.1 旋转关节介绍 225
10.5.2 多边形刚体类MyPolygon Color的开发 225
10.5.3 生成刚体形状的工具类——Box2DUtil 226
10.5.4 将场景中的刚体摆放到位 227
10.5.5 增加旋转关节 227
10.6 旋转关节链条摆案例 229
10.6.1 案例运行效果 229
10.6.2 案例的机械结构 229
10.6.3 主控制类——MyBox2dActivity 230
10.7 组合机械结构案例 231
10.7.1 案例运行效果 231
10.7.2 整体场景的机械结构 232
10.7.3 案例的基本框架结构 233
10.7.4 圆形刚体类MyCircleColor 234
10.7.5 生成刚体的工具类Box2DUtil 235
10.7.6 游戏界面——GameView 236
10.7.7 主控制类MyBox2dActivity 237
10.7.8 绘画线程类——DrawThread 239
10.8 小结 240
第11章 OpenGL ES 3D应用开发基础 241
11.1 OpenGLES概述及3D基本图形绘制 241
11.1.1 OpenGL及OpenGL ES简介 241
11.1.2 3D基本知识 242
11.1.3 使用索引的不同绘制方式 243
11.1.4 用索引法绘制三角形的案例 244
11.1.5 不使用索引数据绘制 250
11.2 正交投影和透视投影 251
11.2.1 正交投影 251
11.2.2 透视投影 252
11.2.3 两种投影方式的原理及视口 253
11.2.4 两种投影方式的案例 253
11.3 光照与材质 255
11.3.1 光照的3种组成元素 255
11.3.2 定向光与定位光 256
11.3.3 法向量 257
11.3.4 材质 259
11.3.5 两种光源的案例 259
11.4 纹理及纹理映射 261
11.4.1 纹理映射基本原理 262
11.4.2 使用纹理映射的案例 262
11.4.3 几种纹理拉伸方式 265
11.4.4 几种纹理过滤方式 266
11.5 摄像机和雾特效 267
11.5.1 摄像机的设置 267
11.5.2 设置合理的视角 268
11.5.3 雾特效的开发 269
11.6 典型几何体的开发 271
11.6.1 圆柱 271
11.6.2 圆锥 275
11.6.3 球 278
11.6.4 椭圆体 280
11.6.5 胶囊体 282
11.6.6 几何体大集合 285
11.7 小结 287
第二篇 Android游戏开发实战综合案例 290
第12章 滚屏动作游戏——太空保卫战 290
12.1 游戏的背景及功能概述 290
12.1.1 游戏背景概述 290
12.1.2 游戏功能简介 290
12.2 游戏的策划及准备工作 292
12.2.1 游戏的策划 292
12.2.2 Android平台下游戏开发的准备工作 292
12.3 游戏的架构 294
12.3.1 各种类的简要介绍 294
12.3.2 游戏的框架简介 295
12.4 辅助界面相关类的实现 296
12.4.1 主控制类——PlaneActivity的实现 296
12.4.2 欢迎界面WelcomeView类 298
12.4.3 其他辅助界面的介绍 301
12.5 游戏界面的框架设计 303
12.6 游戏实体相关类的实现 307
12.6.1 飞机Plane类的实现 307
12.6.2 敌方飞机EnemyPlane类的实现 310
12.6.3 子弹Bullet类的实现 311
12.6.4 其他相关类的实现 312
12.7 游戏界面的完善 314
12.7.1 地图类Maps的实现 314
12.7.2 背景滚动类GameViewBackGroundThread的实现 316
12.7.3 物体移动线程MoveThread的实现 317
12.7.4 键盘监听线程PlanMove Thread的实现 318
12.7.5 图片初始化方法initBitmap的实现 319
12.7.6 绘制方法onDraw的实现 320
12.8 游戏的优化与改进 322
第13章 棋牌游戏——中国象棋人机对弈 323
13.1 游戏的背景及功能概述 323
13.1.1 游戏背景概述 323
13.1.2 游戏功能介绍 323
13.2 游戏的策划及准备工作 324
13.2.1 游戏的策划 324
13.2.2 Android平台下游戏的准备工作 325
13.3 游戏的架构 327
13.3.1 各个类简要介绍 327
13.3.2 游戏框架简介 328
13.4 主控制类——Chess DJB Activity 328
13.5 辅助界面相关类 331
13.6 游戏界面相关类 333
13.6.1 游戏界面绘制类GameView 333
13.6.2 游戏界面常量类ViewConstant 348
13.7 走法引擎相关类 349
13.7.1 常量类Constant 349
13.7.2 工具类Chess_LoadUtil 353
13.7.3 走法引擎主类LoadUtil 354
13.7.4 走法的排序规则类MyComparator 363
13.7.5 记录走棋步骤类StackplayChess 364
13.8 游戏的优化与改进 364
第14章 物理传感器游戏——哇!重力球 365
14.1 游戏背景及功能概述 365
14.1.1 游戏背景概述 365
14.1.2 游戏功能简介 365
14.2 游戏的策划和准备工作 367
14.2.1 游戏的策划 367
14.2.2 游戏的准备工作 367
14.3 游戏的架构 369
14.3.1 游戏的总体架构 369
14.3.2 游戏的类架构 369
14.4 主控制类——TableBallActivity类的开发 371
14.5 界面相关类 374
14.5.1 主界面类MainMenuView 374
14.5.2 模式选择界面类PatternChooseView 376
14.5.3 选关界面LevelChooseView 378
14.5.4 历史记录界面HistoryView 379
14.5.5 设置界面SettingsView 382
14.6 工具辅助类 384
14.6.1 数据库类DBUtil 385
14.6.2 声音工具类SoundUtil 389
14.6.3 图片工具类PieLoadUtil 391
14.6.4 时间相关类 393
14.7 刚体类 395
14.7.1 刚体父类MyBody 395
14.7.2 球洞类Hole 396
14.7.3 变化的洞FlashHole类 397
14.7.4 创建刚体的工具类 398
14.8 游戏界面相关类 401
14.8.1 游戏界面GameView 401
14.8.2 碰撞响应类CollisionAction 404
14.8.3 游戏界面绘画线程DrawThread 406
14.9 游戏的优化与改进 406
第15章 塔防游戏——炫彩塔防 408
15.1 游戏背景及功能概述 408
15.1.1 游戏背景概述 408
15.1.2 游戏功能介绍 408
15.2 游戏的策划及准备工作 410
15.2.1 游戏的策划 411
15.2.2 Android平台下游戏开发的准备工作 411
15.3 游戏的架构 414
15.3.1 各个类的简要介绍 414
15.3.2 游戏框架简介 416
15.4 游戏辅助界面 417
15.4.1 主菜单界面 417
15.4.2 游戏关卡界面 419
15.4.3 关于游戏界面 423
15.5 游戏算法及主界面相关类 424
15.5.1 游戏核心算法类——Game 424
15.5.2 游戏界面相关类 427
15.5.3 怪物类——MonsterSquare 434
15.5.4 炮塔类——Tower Shell 440
15.5.5 子弹相关类 444
15.5.6 地图功能类——Blood_Up 449
15.5.7 怪物生成线程——CreateMonster 450
15.5.8 爆炸类——Utils 451
15.5.9 屏幕自适应相关类 453
15.6 游戏的优化及改进 456
第16章 策略游戏——回到战国 457
16.1 游戏背景及功能概述 457
16.1.1 游戏背景概述 457
16.1.2 游戏功能简介 457
16.2 游戏的策划及准备工作 461
16.2.1 游戏的策划 461
16.2.2 Android平台下游戏的准备工作 462
16.3 游戏的架构 463
16.3.1 游戏的模块架构 463
16.3.2 游戏各个类的简要介绍 464
16.4 地图设计器的开发 466
16.4.1 底层地图设计器的开发 466
16.4.2 上层地图设计器的开发 469
16.5 Activity和游戏工具类的开发 470
16.5.1 主控制类——HDZGActivity的介绍 470
16.5.2 公式封装类——GameFormula的介绍 472
16.5.3 常量工具类ConstantUtil的介绍 474
16.6 数据存取模块的开发 475
16.6.1 城池信息以及地图层信息的封装类 475
16.6.2 数据存取相关类的介绍 478
16.7 英雄角色模块的开发 481
16.7.1 Hero类的代码框架 482
16.7.2 英雄运动线程——HeroGoThread类的开发 483
16.7.3 辅助线程——HeroBackDataThread类的开发 486
16.8 表示层界面模块的开发 486
16.8.1 滚屏类——ScreenRollView类的开发 486
16.8.2 滚屏线程——ScreenRollThread的开发 487
16.8.3 游戏界面GameView的框架介绍 488
16.8.4 游戏界面绘制方法onDraw的介绍 491
16.8.5 游戏界面屏幕监听方法onTouch的介绍 492
16.8.6 游戏界面后台线程Game ViewThread的介绍 495
16.9 管理面板模块的开发 495
16.9.1 人物属性面板类ManPanelView的开发 495
16.9.2 城池管理面板类CityManageView的开发 500
16.10 地图中可遇实体模块的开发 503
16.10.1 绘制类——MyDrawable的开发 503
16.10.2 抽象类——MyMeetableDrawable的开发 504
16.10.3 森林类——ForestDrawable的开发 505
16.10.4 可遇实体对象的调用流程 507
16.11 英雄技能模块的开发 508
16.11.1 技能抽象类——Skill的开发 509
16.11.2 伐木技能类——LumberSkill的开发 509
16.11.3 “随心步”技能类——SuiXinBuSkill的开发 510
16.12 游戏提示模块的开发 510
16.12.1 提示模块抽象类——GameAlert的开发 511
16.12.2 点击确定按钮显示的信息类——PlainAlert的开发 511
16.12.3 显示粮草危机信息类——FoodAlert的开发 512
16.12.4 辅助线程HeroBackDataThread中对FoodAlert的调用 514
16.13 游戏的优化与改进 515
第17章 体育游戏——2D迷你桌球 516
17.1 2D桌球的背景及功能概述 516
17.1.1 游戏背景概述 516
17.1.2 游戏功能简介 516
17.2 游戏的策划及准备工作 518
17.2.1 游戏的策划 518
17.2.2 Android平台下游戏的准备工作 519
17.3 游戏的架构 519
17.3.1 游戏的框架简介 520
17.3.2 各个类的简要介绍 520
17.4 公共类的实现 522
17.4.1 主控制类——GameActivity的代码框架 522
17.4.2 GameActivity类主要成员变量及方法的实现 524
17.4.3 常量类——Constant的实现 528
17.5 辅助界面相关类的实现 529
17.5.1 欢迎动画界面WelcomeView类的实现 529
17.5.2 主菜单界面MainMenuView的代码框架 531
17.5.3 主界面类——MainMenuView部分成员方法的实现 532
17.5.4 主界面动画线程类ViewDrawThread的实现 534
17.5.5 排行榜界面HighScoreView的代码框架 536
17.5.6 HighScoreView类的部分方法的实现 536
17.6 游戏界面相关类的实现 538
17.6.1 游戏界面GameView类的代码框架 538
17.6.2 GameView类部分成员方法的实现 539
17.6.3 键盘监听线程KeyThread类的实现 542
17.6.4 球运动的线程BallGoThread类的实现 543
17.7 情景相关类的实现 544
17.7.1 球台Table类的实现 544
17.7.2 桌球Ball类的代码框架 546
17.7.3 Ball类部分成员方法的实现 548
17.7.4 球杆Cue类的实现 550
17.8 自定义控件及工具类的实现 552
17.8.1 球与球碰撞检测的工具类CollisionUtil的实现 552
17.8.2 定时器Timer类的实现 554
17.8.3 主菜单按钮MainMenuButton类的实现 555
17.8.4 获取日期的工具DateUtil类的实现 556
17.9 游戏的优化与改进 556
第18章 益智游戏——3D魔方 557
18.1 游戏背景及功能概述 557
18.1.1 游戏开发背景概述 557
18.1.2 游戏功能介绍 558
18.2 游戏的策划及准备工作 559
18.2.1 游戏的策划 559
18.2.2 Android平台下游戏开发的准备工作 560
18.3 游戏的架构 561
18.3.1 各个类简要介绍 561
18.3.2 游戏框架简介 563
18.4 公共类CubeActivity 564
18.5 游戏欢迎界面类WelcomeView 567
18.6 游戏界面相关类 570
18.6.1 辅助类TextureRect类 570
18.6.2 魔方控制类CubesControl 571
18.6.3 魔方正方形绘制类CubeSurfDraw 575
18.6.4 辅助类FlagDraw 577
18.6.5 魔方单面颜色信息类Surface 578
18.6.6 魔方信息类CubeData 578
18.6.7 单个魔方面类SurfaceGroup 583
18.6.8 数据常量类Constant 583
18.6.9 游戏界面类MySurfaceView 585
18.7 游戏相关线程类 591
18.7.1 单层旋转动画类RotateThread 591
18.7.2 游戏帮助类HelpThread 593
18.7.3 魔方还原动画类ReSetCube 596
18.7.4 打乱魔方动画类UpsetThread 597
18.7.5 计时器类TimeThread 598
18.8 魔方的还原算法工具类ReSetUtil 600
18.9 游戏的优化与改进 601
第19章 物理引擎游戏——盛怒的老鼠 602
19.1 游戏背景及功能概述 602
19.1.1 游戏开发背景 602
19.1.2 游戏功能概述 602
19.2 游戏策划及准备工作 604
19.2.1 游戏策划 604
19.2.2 游戏开发的准备工作 605
19.3 游戏的框架 607
19.3.1 游戏主要用到的技术 607
19.3.2 游戏各个类的介绍 607
19.3.3 游戏的基本框架 609
19.4 公共类 609
19.4.1 主控制类——MyBox2dActivity 609
19.4.2 常量类Constant 611
19.5 主界面的设计与实现 619
19.5.1 鼠头和猫头类Taj 619
19.5.2 鼠头和猫头控制线程——TJThread 620
19.5.3 主界面MainMenuView 621
19.5.4 刷帧线程MainMenu DrawThread 626
19.6 工具类 627
19.6.1 加载及缩放图片的工具类PicLoadUtil 627
19.6.2 生成刚体工具类Box2DUtil 628
19.6.3 声音工具类SoundUtil 629
19.7 刚体相关类 630
19.7.1 多边形类MyPolygonImg 630
19.7.2 猫头类BodyCat 631
19.7.3 冰块类BodyIce 632
19.7.4 木条类BodyWood 633
19.7.5 刚体类型枚举类BodyType 634
19.7.6 刚体查询工具类BodySearchUtil 634
19.8 游戏界面相关类 635
19.8.1 皮筋类Pijin 635
19.8.2 记录分数类Score 636
19.8.3 刷帧线程DrawThread 637
19.8.4 游戏界面类GameView 639
19.9 游戏优化与改进 644