第1章 libGDX简介 1
1.1 libGDX介绍 1
1.1.1 libGDX的特点 1
1.1.2 libGDX 中的工具 3
1.1.3 libGDX的历史 5
1.1.4 我的libGDX版本 5
1.2 搭建libGDX开发环境 5
1.2.1 libGDX 下载 6
1.2.2 Android项目的新建 7
1.2.3 libGDX的安装 9
1.3 开始第一个libGDX游戏 11
1.3.1 第一个HelloWorld程序的编写 11
1.3.2 在Android设备上调试 15
1.3.3 桌面调试环境的搭建 17
1.3.4 HelloWorld程序的简单分析 22
1.4 运行libGDX的官方Demo 23
1.4.1 libGDX的官网 23
1.4.2 Demo的下载演示 24
1.5 其他的一些准备工作 25
1.5.1 关联Android源码 25
1.5.2 libGDX源码的关联 28
1.5.3 直接打开.jar文件的配置 30
第2章 libGDX的架构分析 34
2.1 生命周期 34
2.1.1 libGDX 中生命周期的图示 34
2.1.2 生命周期中各个函数的分析 35
2.1.3 实例:通过例子深刻理解生命周期 35
2.2 模块 38
2.2.1 libGDX模块组成的图示 38
2.2.2 libGDX模块的分析 39
2.3 运行环境的相关查询 40
2.3.1 获取目前的运行环境 40
2.3.2 获取内存的消耗情况 41
2.4 日志工具 41
2.4.1 Android中的日志等级及输出方法 41
2.4.2 libGDX中的日志等级及输出方法 42
2.4.3 一种方便的输出日志的方法 44
第3章 数据存储 45
3.1 简介 45
3.2 Android 中SharedPreferences的使用 45
3.2.1 获得一个SharedPreferences对象 46
3.2.2 从SharedPreferences获取数据 46
3.2.3 往SharedPreferences保存数据 46
3.2.4 实例:使用Android 中的 SharedPreferences来实现存取数据 47
3.3 libGDX对SharedPreferences的支持 49
3.3.1 获得一个SharedPreferences数据 49
3.3.2 从SharedPreferences获取数据 49
3.3.3 往SharedPreferences保存数据 49
3.3.4 实例:使用libGDX对SharedPreferences的支持来实现数据的存取 50
3.4 Android中操作XML形式的数据 51
3.4.1 XML的定义 51
3.4.2 XML的优缺点 52
3.4.3 Android中使用DOM来解析XML形式的数据 52
3.4.4 Android中使用DOM来生成XML形式的数据 55
3.4.5 Android中使用SAX来解析XML形式的数据 58
3.4.6 Android中使用SAX来生成XML形式的数据 61
3.4.7 Android中使用PULL来解析XML形式的数据 64
3.4.8 Android中使用PULL来生成 XML形式的数据 67
3.5 libGDX对XML的支持 70
3.5.1 使用libGDX中的接口将生成 XML形式的数据 70
3.5.2 使用libGDX中的接口解析XML形式的数据 72
3.6 Android中操作JSON格式的数据 74
3.6.1 JSON的定义 74
3.6.2 JSON的优缺点 74
3.6.3 Android中JSON的原始解析方法 75
3.6.4 Android中JSON的原始生成方法 78
3.6.5 Android中使用Gson来解析JSON形式的数据 79
3.6.6 Android中使用Gson来生成JSON形式的数据 80
3.6.7 Android中使用FastJson来解析JSON形式的数据 81
3.6.8 Android中使用FastJson来生成JSON形式的数据 83
3.6.9 以上3种操作JSON格式数据的方法的简单比较 83
3.7 libGDX中对JSON格式数据的支持 83
3.7.1 使用libGDX中的API生成JSON形式的数据 83
3.7.2 使用libGDX中的API解析JSON形式的数据 86
3.8 XML与JSON的简单比较 86
3.8.1 关于轻量级和重量级 86
3.8.2 关于数据格式编码及解析难度 87
3.9 libGDX中的文件处理 87
3.9.1 几种文件存储路径 88
3.9.2 检查存储路径是否可用 88
3.9.3 获得一个FileHandle实例 89
3.9.4 对FileHandle的常见操作 89
3.9.5 读取文件 90
3.9.6 写文件 90
3.9.7 使用FileHandle来删除、拷贝、移动、重命名文件 90
第4章 libGDX中的UI编程 92
4.1 绘制的基础——SpriteBatch类的介绍 92
4.1.1 SpriteBatch的功能 92
4.1.2 基本API 92
4.2 中文字符的显示——hiero工具的介绍与基本使用 92
4.2.1 hiero工具的下载 93
4.2.2 hiero的功能界面剖析 93
4.2.3 利用hiero生成程序中要用的字体文件 94
4.3 文本信息的显示——BitmapFont类的基本使用 95
4.3.1 BitrnapFont的功能 95
4.3.2 基本API 95
4.3.3 实例:使用BitmapFont来显示一段文本信息 95
4.4 自定义的中文字体的显示——TTF字库的介绍与使用 97
4.4.1 功能 97
4.4.2 基本API 97
4.4.3 使用优美字体前的准备 98
4.4.4 实例:显示一段帅气的文本 98
4.5 图片的显示(1)——Texture类的介绍及基本使用 100
4.5.1 功能 100
4.5.2 基本API 100
4.5.3 实例:使用SpriteBatch和Texture在屏幕中显示一张图片 101
4.6 图片的显示(2)——TextureRegion类的介绍与基本使用 103
4.6.1 功能 103
4.6.2 基本API 103
4.6.3 实例:使用SpriteBatch和TextureRegion在屏幕中显示一张图片 104
4.7 图片的显示(3)——Sprite类的介绍与基本使用 105
4.7.1 功能 105
4.7.2 基本API 105
4.7.3 实例:旋转的精灵 106
4.8 libGDX中的合图(1)——合图工具TexturePacker的介绍与基本使用 107
4.8.1 TexturePacker的下载 108
4.8.2 TexturePacker功能界面剖析 108
4.8.3 利用TexturePacker进行合图 109
4.9 libGDX中的合图(2)——TextureAtlas 类的介绍与基本使用 111
4.9.1 功能 111
4.9.2 基本API 111
4.9.3 实例:使用TextureAtlas后的图片的使用 111
4.10 自定义动画——Animation类的介绍与基本使用 113
4.10.1 功能 113
4.10.2 基本API 113
4.10.3 实例:奔跑的小人 114
4.11 libGDX中的粒子编辑器(1)——Particle-Editor的介绍与基本使用 116
4.11.1 下载 116
4.11.2 功能界面剖析 117
4.11.3 利用粒子编辑器生成相应文件 118
4.12 libGDX 中的粒子编辑器(2) ——ParticleEffect类的介绍与基本使用 119
4.12.1 功能 119
4.12.2 基本API 119
4.12.3 实例:类似于微信的烟火效果 119
第5章 libGDX中的常见UI组件 122
5.1 演员与舞台的简单介绍 122
5.2 文本信息的显示——Label、LabelStyle类的介绍与基本使用 122
5.2.1 功能 122
5.2.2 基本API 122
5.2.3 实例:用Label显示一段文本信息 123
5.3 图片的显示——Image类的介绍与基本使用 124
5.3.1 功能 124
5.3.2 基本API 125
5.3.3 实例:实现一个“旋转的飞机” 125
5.4 Image生成的另外一种方式——Pixmap类的介绍与基本使用 126
5.4.1 功能 127
5.4.2 基本API 127
5.4.3 实例:使用Pixmap来画多种几何图形 127
5.4.4 实例:使用Pixmap来生成涂抹功能 129
5.4.5 Pixmap在使用时需要注意的问题——白屏问题 133
5.5 图片翻转的两种方式 134
5.5.1 图片翻转的第一种方式——使用TextureRegion的flip() 134
5.5.2 图片翻转的第二种方式——通过SpriteBatch的draw()方法 135
5.6 滚动条——ScrollPane的介绍与基本使用 137
5.6.1 功能 137
5.6.2 基本API 137
5.6.3 实例:使用ScrollPane实现一个选关界面 137
5.7 游戏中的背景移动 139
5.7.1 原理分析 139
5.7.2 实现天天打飞机中的“背景移动” 141
5.8 演员的常见动画的介绍与基本使用 143
5.8.1 旋转动画——rotateTo与rotateBy 144
5.8.2 位移动画——moveTo与moveBy 144
5.8.3 透明度渐变动画——fadeIn()与fadeOut() 145
5.8.4 缩放动画——scaleTo()与scaleBy() 145
5.8.5 组合动画——顺序动画与并行动画 145
5.8.6 实例:Tween动画的综合例子 146
5.9 按钮——Button类的介绍与基本使用 148
5.9.1 功能 148
5.9.2 基本API 148
5.9.3 实例:使用Button来控制一个loading图片 149
5.10 游戏摇杆——TouchPad的介绍与基本使用 153
5.10.1 功能 153
5.10.2 基本API 154
5.10.3 实例:使用游戏摇杆控制游戏元素 155
5.11 滑块——Slider的介绍与基本使用 159
5.11.1 功能 159
5.11.2 基本API 160
5.11.3 实例:使用滑块Slider来控制游戏元素的缩放 161
5.12 分割窗口——SplitPane的介绍与基本使用 165
5.12.1 功能 166
5.12.2 基本API 166
5.12.3 实例:使用分割窗口SplitPane来实现一个分割窗口 167
5.13 复选框——CheckBox的介绍与基本使用 170
5.13.1 功能 171
5.13.2 基本API 171
5.13.3 实例:使用复选框CheckBox来控制画面的切换 172
5.14 列表——List的介绍与基本使用 176
5.14.1 功能 176
5.14.2 基本API 177
5.14.3 实例:使用列表List来显示内容 178
5.15 文本输入框——TextField的介绍与基本使用 181
5.15.1 功能 181
5.15.2 基本API 181
5.15.3 实例:使用文本输入框TextField来实现文本信息的输入 183
第6章 libGDX中的事件处理与音效 188
6.1 InputProcessor的介绍与基本使用 188
6.1.1 InputMultiplexer的介绍与基本使用 189
6.1.2 实例:使用按钮来操控滚动条 190
6.2 振动器的介绍与使用 192
6.2.1 准备工作——添加相应的权限 192
6.2.2 基本API 193
6.2.3 实例:按按钮触发振动 193
6.3 back键和menu键的捕捉 194
6.4 短音频文件的处理——Sound类的介绍与基本使用 195
6.4.1 功能 195
6.4.2 基本API 195
6.4.3 实例:给按钮添加单击声音 195
6.5 长音频文件的处理——Music类的介绍与基本使用 196
6.5.1 功能 197
6.5.2 基本API 197
6.5.3 实例:单击某一个按钮播放音乐 197
第7章 资源加载器、游戏界面的跳转以及物理引擎 199
7.1 资源加载器——AssetManager类的介绍与基本使用 199
7.1.1 功能 199
7.1.2 基本API 200
7.1.3 实例:游戏中的loading界面第一部分 200
7.1.4 实例:游戏中的loading界面第二部分 203
7.2 游戏界面的跳转 204
7.2.1 第一种方式——隐藏其中一个,显示另外一个 204
7.2.2 第二种方式——setScreen() 206
7.3 libGDX中的物理引擎——Box2D基础 209
7.3.1 基础类概览 209
7.3.2 基础类的详细介绍 210
7.3.3 实例:下降的小球与砖块 213
第8章 libGDX中的UI编辑器 216
8.1 让CocosStudio成为libGDX的UI编辑器 216
8.2 CocosStudio的UI编辑器的基本使用 217
8.2.1 新建项目 217
8.2.2 调整屏幕大小 218
8.2.3 导入资源 219
8.2.4 摆放素材 219
8.2.5 设置元素属性 220
8.2.6 修改元素的名字 221
8.2.7 保存项目 221
8.3 解析CocosStudio的UI文件 221
8.3.1 找到数据文件 221
8.3.2 简单分析数据文件 222
8.3.3 编写代码解析JSON文件 223
8.3.4 CocosStudio解析工具类的基本用法 228
8.3.5 让CocosStudio UI编辑器的数据在libGDX中完美运行 229
8.4 CocosStudio生成的JSON文件中的隐患及解决方案 231
8.4.1 隐患分析 231
8.4.2 解决方案 231
第9章 小游戏实战——捡金币 232
9.1 游戏的感性认识 232
9.1.1 游戏运行效果图 232
9.1.2 组成分析 233
9.2 金币、背景的实现的原理分析 233
9.3 游戏成就的原理分析及游戏中的碰撞检测 233
9.3.1 检测的简单介绍 234
9.3.2 游戏成就的原理分析 234
9.4 成功界面与失败界面的原理分析 234
9.5 剩余时间的原理分析 235
9.6 代码实现 235
9.6.1 金币(Jinbi)逻辑体的实现 235
9.6.2 工具类(Utils)的实现 237
9.6.3 背景(BgImage)逻辑体的实现 237
9.6.4 游戏主逻辑体MyGame 239
9.6.5 Android与libGDX交互类MainActivity的编写 244
第10章 休闲类游戏——2048 245
10.1 2048的由来及功能概述 245
10.1.1 2048的由来 245
10.1.2 功能简介 245
10.2 游戏的策划及准备工作 247
10.2.1 游戏的策划 247
10.2.2 Android平台下游戏的准备工作 247
10.3 游戏的架构 248
10.3.1 游戏中用到的主要技术 248
10.3.2 各类的简要介绍 248
10.3.3 游戏的框架简介 249
10.3.4 游戏中核心逻辑的几个要点 250
10.4 游戏程序入口的设计与实现 251
10.4.1 MainActivity的实现 251
10.4.2 MyGame类的实现 252
10.5 游戏主界面GameScreen的设计与实现 253
10.5.1 游戏主界面的框架设计 253
10.5.2 游戏主界面GameScreen的实现 257
10.6 游戏中所涉及的各个逻辑体 270
10.6.1 资源管理类Assets的设计 270
10.6.2 资源管理类Assets的实现 271
10.6.3 游戏中的常量类Contants 272
10.6.4 游戏中分数逻辑体Score类的设计与实现 273
10.6.5 每种分值对应的颜色的逻辑体Square的设计 274
10.6.6 Square类的实现 275
10.6.7 分数格子逻辑体Cell类的设计 279
10.6.8 分数格子逻辑体Cell类的实现 280
10.6.9 数据存储与恢复逻辑体Prefs的设计 285
10.6.10 数据存储与恢复逻辑体Prefs的实现 285
10.7 游戏的优化与改进 289