编辑推荐
在介绍基础内容时,每个知识点都配有相应的实例,通过这些实例,读者可以更好地理解书中所介绍的知识。7个大的游戏案例,包括休闲游戏、益智游戏、动作游戏、塔防游戏、策略游戏等不同的游戏类型,每种游戏类型的案例开发都有其独特的地方本书中所有案例的完整源代码都更新为Android Studio版本,便于读者紧跟潮流
内容简介
内 容 提 要本书内容分为两大部分:首先讲解了Android游戏开发核心技术,主要包括Android游戏开发的前台渲染、交互式通信、数据存储和传感器、网络编程、游戏背后的数学与物理、游戏地图开发、游戏开发小秘技、JBox2D物理引擎、3D应用开发基础等;接下来介绍Android游戏开发实战综合案例,包括多种流行的游戏类型,如滚屏动作类游戏—《坦克大战》、网络游戏—《风火三国》、益智类游戏—《Wo!Water!》、3D塔防类游戏—《三国塔防》、策略游戏—《大富翁》、休闲类游戏—《切切乐》、休闲类游戏—《3D冰球》等。本书适合Android初学者、游戏开发人员阅读,也可作为高校相关专业的学习用书或培训学校的教材。
作者简介
吴亚峰,毕业于北京邮电大学,后留学澳大利亚卧龙岗大学取得硕士学位。1998年开始从事Java应用的开发,有10多年的Java开发与培训经验。主要的研究方向为OpenGL ES、WebGL、Vulkan及手机游戏。同时为手机游戏、移动3D应用独立软件开发工程师,并兼任百纳科技Java培训中心首xi培训师。近十年来为数十家企业培养了上千名软件开发人员,曾编写过《Cocos2d-X案例开发大全》《Cocos2d-X 3.0游戏开发实战详解》《Cocos2d-X 3.x 游戏案例开发大全》《OpenGL ES 3.x游戏开发(上下卷)》《H5和WebGL 3D开发实战详解》等多本畅销技术书籍。2008年初开始关注Android平台下的3D应用开发,并开发出一系列的Android应用程序与3D游戏。
目录
- 第1章 Android平台简介 1
- 1.1 Android的来龙去脉 1
- 1.2 掀起Android的盖头来 1
- 1.2.1 选择Android的理由 1
- 1.2.2 Android的应用程序框架 2
- 1.3 Android开发环境的搭建 4
- 1.3.1 Android Studio和Android SDK的下载 4
- 1.3.2 Android Studio和Android SDK的安装 4
- 1.3.3 开发第 一个Android程序 8
- 1.3.4 Android程序的监控与调试 13
- 1.4 已有Android Studio项目的导入与运行 14
- 1.5 本章小结 16
- 第2章 Android游戏开发中的前台渲染 17
- 2.1 创建Android用户界面 17
- 2.1.1 布局管理 17
- 2.1.2 常用控件及其事件处理 22
- 2.2 图形与动画在Android中的实现 24
- 2.2.1 简单图形的绘制 24
- 2.2.2 贴图的艺术 25
- 2.2.3 剪裁功能 27
- 2.2.4 自定义动画的播放 30
- 2.3 Android平台下的多媒体开发 32
- 2.3.1 音频的播放 32
- 2.3.2 视频的播放 35
- 2.3.3 Camera图像采集 37
- 2.4 本章小结 39
- 第3章 Android游戏开发中的交互式通信 40
- 3.1 Android应用程序的基本组件 40
- 3.1.1 Activity组件 40
- 3.1.2 Service组件 42
- 3.1.3 Broadcast Receiver组件 42
- 3.1.4 Content Provider组件 43
- 3.1.5 AndroidManifest.xml文件简介 44
- 3.2 应用程序的内部通信 46
- 3.2.1 消息的处理者—Handler类简介 47
- 3.2.2 使用Handler进行内部通信 48
- 3.3 应用程序组件之间的通信 49
- 3.3.1 Intent类简介 50
- 3.3.2 应用程序组件—IntentFilter类简介 51
- 3.3.3 示例1:与Android系统组件通信 52
- 3.3.4 示例2:应用程序组件间通信示例Activity部分的开发 53
- 3.3.5 示例3:应用程序组件间通信示例Service部分的开发 55
- 3.4 本章小结 57
- 第4章 Android游戏开发中的数据存储和传感器 58
- 4.1 在Android平台上实现数据存储 58
- 4.1.1 私有文件夹文件的写入与读取 58
- 4.1.2 读取Resources和Assets中的文件 61
- 4.1.3 轻量级数据库SQLite简介 63
- 4.1.4 SQLite的使用示例 65
- 4.1.5 数据共享者—Content Provider的使用 68
- 4.1.6 简单的数据存储—Preferences的使用 71
- 4.2 Android平台下传感器应用的开发 73
- 4.2.1 基本开发步骤 74
- 4.2.2 光传感器 76
- 4.2.3 温度传感器 77
- 4.2.4 接近传感器 79
- 4.2.5 加速度传感器 80
- 4.2.6 磁场传感器 82
- 4.2.7 姿态传感器 84
- 4.2.8 陀螺仪传感器 87
- 4.2.9 加速度传感器综合案例 88
- 4.2.10 传感器的坐标轴问题 91
- 4.3 本章小结 94
- 第5章 Android游戏开发中的网络编程 95
- 5.1 基于Socket套接字的网络编程 95
- 5.2 基于HTTP的网络编程 98
- 5.2.1 通过URL获取网络资源 98
- 5.2.2 在Android中解析XML 100
- 5.3 蓝牙通信 101
- 5.3.1 基础知识 101
- 5.3.2 简单的案例 101
- 5.4 简单的多用户并发网络游戏编程架构 112
- 5.4.1 基本知识 112
- 5.4.2 双人联网操控飞机案例 114
- 5.5 本章小结 123
- 第6章 不一样的游戏,一样的精彩应用 125
- 6.1 射击类游戏 125
- 6.1.1 游戏玩法 125
- 6.1.2 视觉效果 125
- 6.1.3 游戏内容设计 126
- 6.2 竞速类游戏 127
- 6.2.1 游戏玩法 127
- 6.2.2 视觉效果 127
- 6.2.3 游戏内容设计 127
- 6.3 益智类游戏 128
- 6.3.1 游戏玩法 128
- 6.3.2 视觉效果 129
- 6.3.3 游戏内容设计 129
- 6.4 角色扮演游戏 129
- 6.4.1 游戏玩法 129
- 6.4.2 视觉效果 130
- 6.4.3 游戏内容设计 131
- 6.5 闯关动作类游戏 131
- 6.5.1 游戏玩法 132
- 6.5.2 视觉效果 132
- 6.5.3 游戏内容设计 132
- 6.6 冒险游戏 132
- 6.6.1 游戏玩法 133
- 6.6.2 视觉效果 133
- 6.6.3 游戏内容设计 134
- 6.7 策略游戏 134
- 6.7.1 游戏玩法 134
- 6.7.2 视觉效果 135
- 6.7.3 游戏内容设计 135
- 6.8 养成类游戏 135
- 6.8.1 游戏玩法 135
- 6.8.2 视觉效果 136
- 6.8.3 游戏内容设计 136
- 6.9 经营类游戏 137
- 6.9.1 游戏玩法 137
- 6.9.2 视觉效果 137
- 6.9.3 游戏内容设计 138
- 6.10 体育类游戏 138
- 6.10.1 游戏玩法 138
- 6.10.2 视觉效果 139
- 6.10.3 游戏内容设计 139
- 6.11 本章小结 139
- 第7章 游戏背后的数学与物理 140
- 7.1 编程中经常用到的数理知识 140
- 7.1.1 数学方面 140
- 7.1.2 物理方面 142
- 7.2 碰撞检测技术 143
- 7.2.1 碰撞检测技术基础 143
- 7.2.2 游戏中实体对象之间的碰撞检测 144
- 7.2.3 游戏实体对象与环境之间的碰撞检测 146
- 7.2.4 穿透效应问题 147
- 7.3 必知必会的计算几何 148
- 7.3.1 GeoLib库中常用基础类的介绍 148
- 7.3.2 无孔多边形的相关知识 156
- 7.3.3 有孔多边形的相关知识 159
- 7.3.4 有孔多边形案例 162
- 7.3.5 显示凸壳案例 166
- 7.3.6 多边形切分案例 169
- 7.3.7 显示包围框以及多边形的矩形组合案例 173
- 7.3.8 旋转与凸子区域案例 175
- 7.3.9 平滑与计算最短距离案例 177
- 7.3.10 多边形缩放与不重叠案例 178
- 7.3.11 求多边形对称案例 180
- 7.3.12 多边形集合运算案例 181
- 7.4 本章小结 183
- 第8章 游戏地图必知必会 184
- 8.1 两种不同单元形状的地图 184
- 8.1.1 正方形单元地图 184
- 8.1.2 正方形单元地图案例 186
- 8.1.3 正六边形单元地图 187
- 8.1.4 正六边形单元地图案例 189
- 8.1.5 正方形单元和正六边形单元地图的比较 191
- 8.2 正六边形单元地图的路径搜索 191
- 8.2.1 路径搜索示例基本框架的搭建 191
- 8.2.2 深度优先路径搜索DFS 197
- 8.2.3 广度优先路径搜索 199
- 8.2.4 路径搜索算法—Dijkstra算法 201
- 8.2.5 用A*算法优化算法 204
- 8.3 正六边形单元地图的网格定位 206
- 8.3.1 基本知识 206
- 8.3.2 简单的案例 206
- 8.4 地图编辑器与关卡设计 208
- 8.4.1 关卡地图的重要性 208
- 8.4.2 图片分割界面的实现 210
- 8.4.3 地图设计界面的实现 214
- 8.5 多分辨率屏幕的自适应 219
- 8.5.1 非等比例缩放 219
- 8.5.2 非等比例缩放案例 220
- 8.5.3 等比例缩放并剪裁 223
- 8.5.4 等比例缩放并剪裁案例 224
- 8.5.5 等比例缩放并留白 225
- 8.5.6 等比例缩放并留白案例 226
- 8.6 本章小结 227
- 第9章 游戏开发小秘技 228
- 9.1 有限状态机 228
- 9.1.1 什么是有限状态机 228
- 9.1.2 有限状态机的简单实现 229
- 9.1.3 有限状态机的OO实现 233
- 9.2 游戏中的模糊逻辑 235
- 9.2.1 模糊的才是真实的 235
- 9.2.2 如何在Android中将游戏模糊化 236
- 9.3 游戏的基本优化技巧 238
- 9.3.1 代码上的小艺术 238
- 9.3.2 Android中的查找表技术 239
- 9.3.3 游戏的感觉和性能问题 241
- 9.4 多点触控技术的使用 242
- 9.4.1 基本知识 242
- 9.4.2 一个简单的案例 243
- 9.5 本章小结 247
- 第10章 JBox2D物理引擎 248
- 10.1 物理引擎很重要 248
- 10.1.1 什么是物理引擎 248
- 10.1.2 常见的物理引擎 248
- 10.2 2D的王者JBox2D 251
- 10.2.1 基本的物理学概念 251
- 10.2.2 JBox2D中常用类的介绍 252
- 10.3 木块金字塔被撞击案例 262
- 10.3.1 案例运行效果 262
- 10.3.2 案例的基本框架结构 263
- 10.3.3 常量类—Constant 263
- 10.3.4 物体类—MyBody 264
- 10.3.5 圆形物体类—MyCircleColor 264
- 10.3.6 矩形物体类—MyRectColor 265
- 10.3.7 生成物理形状工具类—Box2DUtil 266
- 10.3.8 主控制类—MyBox2dActivity 267
- 10.3.9 显示界面类—GameView 269
- 10.3.10 绘制线程类—DrawThread 270
- 10.4 简易打砖块案例 271
- 10.4.1 案例运行效果 271
- 10.4.2 需要了解的类 271
- 10.4.3 碰撞监听器—MyContactListener类 274
- 10.4.4 碰撞检测工具类—BodySearchUtil 275
- 10.4.5 绘制线程类—DrawThread 275
- 10.5 物体无碰撞下落案例 276
- 10.5.1 案例运行效果 276
- 10.5.2 碰撞过滤器—ContactFilter类 277
- 10.5.3 碰撞过滤类的开发 277
- 10.5.4 多边形刚体类—MyPolygonColor 278
- 10.5.5 生成刚体性状的工具类—Box2DUtil 279
- 10.5.6 主控制类—MyBox2dActivity 279
- 10.5.7 显示界面类—GameView 281
- 10.6 关节—Joint 282
- 10.6.1 关节定义—JointDef类 282
- 10.6.2 距离关节描述—DistanceJointDef类 282
- 10.6.3 距离关节案例—小球下摆 283
- 10.6.4 旋转关节描述—RevoluteJointDef类 286
- 10.6.5 旋转关节案例—转动的风扇与跷跷板 287
- 10.6.6 鼠标关节描述—MouseJointDef类 290
- 10.6.7 鼠标关节案例—物体下落 290
- 10.6.8 移动关节描述—PrismaticJointDef类 294
- 10.6.9 移动关节案例—定向移动的木块 295
- 10.6.10 齿轮关节描述—GearJointDef类 297
- 10.6.11 齿轮关节案例—转动的齿轮 298
- 10.6.12 焊接关节描述—WeldJointDef类 301
- 10.6.13 焊接关节案例—有弹性的木板 301
- 10.6.14 滑轮关节描述—PulleyJointDef类 304
- 10.6.15 滑轮关节案例—移动的木块 304
- 10.6.16 车轮关节描述—WheelJointDef类 306
- 10.6.17 车轮关节案例—运动的小车 307
- 10.6.18 绳索关节描述—RopeJointDef类 309
- 10.6.19 绳索关节案例—掉落的糖果 309
- 10.7 模拟传送带案例 317
- 10.7.1 案例运行效果 317
- 10.7.2 碰撞监听器—MyContactListener类 318
- 10.7.3 主控制类—MyBox2DActivity 320
- 10.7.4 线程类—DrawThread 321
- 10.8 光线投射案例 322
- 10.8.1 案例运行效果 322
- 10.8.2 RayCastInput类与RayCastOutput类 322
- 10.8.3 光线检测类—MyRayCast 323
- 10.8.4 主控制类—MyBox2dActivity 324
- 10.8.5 显示界面类—GameView 325
- 10.9 模拟爆炸案例 327
- 10.9.1 案例运行效果 327
- 10.9.2 光线投射回调接口—RayCastCallback 327
- 10.9.3 自身的光线投射回调类—RayCastClosestCallback 328
- 10.9.4 主控制类—MyBox2dActivity 328
- 10.10 流体模拟 329
- 10.10.1 流体模拟的相关知识 330
- 10.10.2 波浪制造机案例 333
- 10.10.3 软体案例 336
- 10.10.4 固体案例 337
- 10.10.5 粉尘案例 339
- 10.11 本章小结 340
- 第11章 3D应用开发基础 341
- 11.1 OpenGL和OpenGL ES简介 341
- 11.2 3D基本知识 343
- 11.3 OpenGL ES 2.0 344
- 11.3.1 OpenGL ES 2.0的渲染管线 345
- 11.3.2 不同的绘制方式 348
- 11.3.3 初识OpenGL ES 2.0应用程序 350
- 11.3.4 着色语言 355
- 11.3.5 正交投影 357
- 11.3.6 透视投影 361
- 11.3.7 光照的3种组成元素 364
- 11.3.8 定向光与定位光 366
- 11.3.9 点法向量和面法向量 371
- 11.3.10 纹理映射 372
- 11.4 利用OpenGL ES 2.0绘制真实的流体 377
- 11.4.1 流体绘制的策略 377
- 11.4.2 一个简单的案例 379
- 11.4.3 流体计算流水线回顾 388
- 11.5 OpenGL ES 3.x 389
- 11.5.1 程序升级的要点 390
- 11.5.2 一个简单的案例 390
- 11.6 用OpenGL ES实现2D绘制 392
- 11.7 本章小结 394
- 第12章 滚屏动作类游戏—《坦克大战》 395
- 12.1 游戏的背景及功能概述 395
- 12.1.1 背景概述 395
- 12.1.2 功能简介 395
- 12.2 游戏的策划及准备工作 397
- 12.2.1 游戏的策划 397
- 12.2.2 安卓平台下游戏开发的准备工作 398
- 12.3 游戏的架构 401
- 12.3.1 程序结构的简要介绍 401
- 12.3.2 服务器端的简要介绍 401
- 12.4 服务器端的开发 402
- 12.4.1 数据类的开发 402
- 12.4.2 服务线程的开发 403
- 12.4.3 碰撞检测类的开发 405
- 12.4.4 动作执行类的开发 407
- 12.4.5 状态更新类的开发 410
- 12.5 Android端的开发 411
- 12.5.1 数据类的开发 411
- 12.5.2 TankActivity类的开发 413
- 12.5.3 MySurfaceView类的开发 415
- 12.5.4 菜单类的开发 419
- 12.5.5 杂项类的开发 421
- 12.5.6 物体绘制类的开发 425
- 12.6 辅助工具类 426
- 12.6.1 摇杆工具类的开发 426
- 12.6.2 数据接收工具类的开发 428
- 12.6.3 数据发送工具类的开发 429
- 12.7 地图设计器 431
- 12.8 游戏的优化及改进 432
- 第13章 网络游戏开发—《风火三国》网络对战游戏 433
- 13.1 游戏背景及功能概述 433
- 13.1.1 背景概述 433
- 13.1.2 功能简介 434
- 13.2 游戏策划及准备工作 436
- 13.2.1 游戏的策划 436
- 13.2.2 Android平台下游戏开发的准备工作 436
- 13.3 游戏的框架 437
- 13.3.1 各个类的简要介绍 437
- 13.3.2 游戏的框架简介 438
- 13.4 共有类SanGuoActivity的实现 439
- 13.5 辅助界面相关类的实现 444
- 13.5.1 欢迎界面类 444
- 13.5.2 主菜单界面类 446
- 13.6 游戏界面相关类的实现 448
- 13.6.1 游戏界面框架 449
- 13.6.2 界面刷帧线程类 457
- 13.6.3 牌图分割类 457
- 13.6.4 牌的控制类 459
- 13.6.5 出牌规则类 460
- 13.7 客户端代理线程 461
- 13.8 服务器相关类 464
- 13.8.1 服务器主类 464
- 13.8.2 服务器代理线程 466
- 13.8.3 发牌类 473
- 13.8.4 初始化血点类 474
- 13.8.5 判断装备牌类 474
- 13.8.6 管理玩家距离类 475
- 13.9 本章小结 476
- 第14章 益智类游戏—《Wo!Water!》 477
- 14.1 游戏背景和功能概述 477
- 14.1.1 背景概述 477
- 14.1.2 功能介绍 478
- 14.2 游戏的策划及准备工作 480
- 14.2.1 游戏的策划 480
- 14.2.2 安卓平台下游戏开发的准备工作 481
- 14.3 游戏的架构 483
- 14.3.1 各个类的简要介绍 484
- 14.3.2 游戏框架简介 486
- 14.4 常量及公共类 488
- 14.4.1 游戏主控类MainActivity 488
- 14.4.2 游戏常量类Constant 490
- 14.4.3 游戏常量类SourceConstant 491
- 14.5 界面相关类 494
- 14.5.1 游戏界面管理类ViewManager 494
- 14.5.2 主选关界面类BNMainSelectView 498
- 14.5.3 游戏界面类BNGameView 502
- 14.5.4 纹理矩形绘制类RectForDraw 512
- 14.5.5 屏幕自适应相关类 515
- 14.6 线程相关类 517
- 14.6.1 物理刷帧线程类PhysicsThread 517
- 14.6.2 数据计算线程类SaveThread 519
- 14.6.3 火焰线程类FireUpdateThread 520
- 14.7 水粒子的相关类 521
- 14.7.1 水粒子物理封装类WaterObject 521
- 14.7.2 水纹理生成类WaterForDraw 522
- 14.7.3 计算类PhyCaulate 525
- 14.8 游戏中着色器的开发 528
- 14.8.1 纹理的着色器 528
- 14.8.2 水纹理的着色器 529
- 14.8.3 加载界面闪屏纹理的着色器 530
- 14.8.4 烟火的纹理着色器 531
- 14.9 游戏地图数据文件介绍 531
- 14.10 游戏的优化及改进 533
- 第15章 3D塔防类游戏—《三国塔防》 534
- 15.1 背景和功能概述 534
- 15.1.1 游戏背景概述 534
- 15.1.2 游戏功能简介 534
- 15.2 游戏的策划及准备工作 538
- 15.2.1 游戏的策划 538
- 15.2.2 手机平台下游戏的准备工作 538
- 15.3 游戏的架构 542
- 15.3.1 各个类的简要介绍 542
- 15.3.2 游戏框架简介 545
- 15.4 公共类TaFang_Activity 546
- 15.5 界面显示类 548
- 15.5.1 显示界面类GlSurfaceView 549
- 15.5.2 界面抽象父类TFAbstractView 549
- 15.5.3 加载资源界面类LoadView 550
- 15.5.4 选关设置界面类SelectView 551
- 15.5.5 武器界面类WeaponView 553
- 15.6 场景及相关类 553
- 15.6.1 总场景管理类AllSence 554
- 15.6.2 关卡场景类SenceLevel1 555
- 15.6.3 水面类Water 556
- 15.6.4 场景数据管理类SenceData 556
- 15.7 辅助类 557
- 15.7.1 按钮管理类MenuButton 557
- 15.7.2 单个怪物类SingleMonster1 558
- 15.7.3 单个炮弹类SingleBullet1 561
- 15.7.4 标志板管理类BoardGroup 563
- 15.7.5 炮台管理类PaoGroup 564
- 15.8 工具线程类 565
- 15.8.1 obj模型加载类LoadUtil 565
- 15.8.2 交点坐标计算类IntersectantUtil 567
- 15.8.3 纹理管理器类TextureManager 567
- 15.8.4 水流动线程类WaterThread 568
- 15.8.5 怪物炮弹控制线程类MonPaoThread 569
- 15.9 粒子系统与着色器的开发 569
- 15.9.1 粒子系统的开发 570
- 15.9.2 着色器的开发 571
- 15.10 游戏的优化及改进 573
- 15.11 本章小结 574
- 第16章 策略游戏—《大富翁》 575
- 16.1 游戏的背景和功能概述 575
- 16.1.1 背景概述 575
- 16.1.2 功能简介 575
- 16.2 游戏的策划及准备工作 578
- 16.2.1 游戏的策划 578
- 16.2.2 安卓平台下游戏开发的准备工作 579
- 16.3 游戏的架构 585
- 16.3.1 程序结构的简要介绍 585
- 16.3.2 游戏各个类的简要介绍 585
- 16.4 地图设计器的开发 587
- 16.4.1 地图设计器的开发设计思路 587
- 16.4.2 地图设计器的框架介绍 588
- 16.4.3 底层地图设计器的开发步骤 588
- 16.5 Activity和游戏工具类的开发 592
- 16.5.1 主控制类—ZActivity的开发 592
- 16.5.2 常量工具类ConstantUtil的开发 594
- 16.5.3 日期管理类DateUtil的开发 595
- 16.5.4 图片管理类PicManager的开发 596
- 16.6 数据存取模块的开发 597
- 16.6.1 地图层信息的封装类 597
- 16.6.2 数据存取相关类的介绍 600
- 16.7 人物角色模块的开发 604
- 16.7.1 Figure类的代码框架 604
- 16.7.2 Dice类的代码框架 606
- 16.7.3 FigureGoThread类的代码框架 607
- 16.8 表示层界面模块的开发 612
- 16.8.1 游戏界面GameView的框架介绍 612
- 16.8.2 游戏界面绘制方法onDraw的介绍 614
- 16.8.3 游戏界面屏幕监听方法onTouch的介绍 618
- 16.8.4 后台线程GameViewThread的开发 619
- 16.9 地图中可遇实体模块的开发 620
- 16.9.1 绘制类—MyDrawable的开发 620
- 16.9.2 抽象类—MyMeetableDrawable的开发 622
- 16.9.3 土地类—GroundDrawable类 623
- 16.9.4 可遇实体对象的调用流程 624
- 16.10 管理面板模块的开发 625
- 16.11 游戏的优化及改进 627
- 第17章 休闲类游戏—《切切乐》 629
- 17.1 游戏的背景和功能概述 629
- 17.1.1 背景描述 629
- 17.1.2 功能介绍 630
- 17.2 游戏的策划及准备工作 633
- 17.2.1 游戏的策划 633
- 17.2.2 手机平台下游戏的准备工作 633
- 17.3 游戏的架构 635
- 17.3.1 各个类的简要介绍 635
- 17.3.2 游戏框架简介 637
- 17.4 显示界面类 638
- 17.5 辅助工具类 644
- 17.5.1 工具类 645
- 17.5.2 辅助类 648
- 17.6 绘制相关类 658
- 17.6.1 BNObject绘制类的开发 658
- 17.6.2 BNPolyObject绘制类的开发 662
- 17.7 雪花粒子系统的开发 663
- 17.7.1 基本原理 664
- 17.7.2 开发步骤 664
- 17.8 本游戏中的着色器 666
- 17.9 游戏的优化及改进 668
- 17.10 本章小结 669
- 第18章 休闲类游戏—《3D冰球》 670
- 18.1 游戏的背景和功能概述 670
- 18.1.1 背景描述 670
- 18.1.2 功能介绍 671
- 18.2 游戏的策划及准备工作 674
- 18.2.1 游戏的策划 674
- 18.2.2 手机平台下游戏的准备工作 675
- 18.3 游戏的架构 677
- 18.3.1 各个类的简要介绍 677
- 18.3.2 游戏框架简介 680
- 18.4 显示界面类 681
- 18.4.1 显示界面MySurfaceView类 681
- 18.4.2 加载界面LoadingView类 682
- 18.4.3 主界面MainView类 683