
本书作为libGDX的入门教程,分为5部分。第一部分(第1~2章)为准备篇,介绍libGDX游戏引擎、历史、功能与特点、开发工具等、多平台的环境搭建等。第二部分(第3章),主要介绍libGDX的项目创建与交叉编译,期间还介绍了使用命令行来调试、运行、打包项目。第三部分(第4~5章),这两章为基础篇,主要是讲解一些基础的开发库。第四部分(第6章),主要讲解游戏开发工具,重点讲解了游戏工具的综合运用。第五部分(第7~9章),主要讲解游戏的控件与高级开发内容。
前 言 写作背景 2010年,这一年是安卓迅猛发展的一年,人们早已不满足于简单安卓软件,取而代之的是各种绚丽特效的应用。2010年,也是手机游戏兴起的一年。在IT界,许多软件开发人员狂热地开始学习游戏开发技术,在此过程中人们发现,SurfaceView游戏框架虽然可以开发出较为优秀的游戏,但是它的开发效率很低,于是人们开始寻找游戏引擎。如果读者喜欢使用Java开发语言,选择libGDX游戏引擎会让你如虎添翼。 2011年,libGDX游戏引擎发展十分迅速,曾经几度发布跨越式的版本,直至0.9.x版本的发布.此时的libGDX已经成为了一款优秀并且完善的游戏引擎,兼容Android、iOS、Html5、PC等多种平台。 2011年,也是笔者开始思考的一年。为什么这款优秀的引擎在国内的推广程度如此低下?为什么许多喜欢Java语言并且也想从事游戏开发的程序员只能选用效率低的SurfaceView游戏框架? 原因有很多,其中最主要的原因就是开发文档的匮乏。libGDX是一款托管于Github的开源游戏引擎,没有中文的开发文档。如果想学习libGDX,只能从官方的示例及英文的开发文档中获取知识,这就导致了许多程序员对libGDX的敬而远之。 2014年,非常荣幸地接到了电子工业出版社的约稿,笔者终于有机会可以推出一本中文的libGDX开发书籍,以填补libGDX游戏引擎在中文参考书籍方面的空白。 本书由长沙理工大学乐晓波教授与长沙理工大学硕士研究生吴继征合作完成。在本书的写作过程中得到了许多专家的大力支持,在此对他们表示诚挚的谢意。 读者对象 = libGDX初级及中级开发者,了解Java语言和游戏开发的读者。 = 没有接触过libGDX,但有过SurfaceView及安卓开发基础的程序员。 = 没有libGDX开发经验,但是有C、Java等语言开发经验的游戏程序员。 = 相关游戏项目的策划与管理人员。 = 高中以上院校计算机相关专业师生。 阅读指引 本书分为五个部分: 第一部分(第1~2章)为准备篇,介绍了libGDX游戏引擎,libGDX的历史、功能与特点,开发工具、多平台的环境搭建等,主要是为后续的开发做准备。 第二部分(第3章),主要介绍libGDX的项目创建与交叉编译,同时还介绍了使用命令行来调试、运行、打包项目,这章主要是让读者熟悉libGDX游戏引擎,对其架构与文档能有初步的认识。 第三部分(第4~5章),这两章为基础篇,主要是讲解一些基础的开发库,重点讲解对于libGDX的动作、动画、文字等内容的处理。 第四部分(第6章),主要讲解游戏开发工具,重点讲解了游戏工具的综合运用。 第五部分(第7~9章),主要讲解游戏的控件与高级开发内容,相对基础来说,这两章的难道相对较大。 勘误 由于笔者实力有限,加上编写时间仓促,书中难免会有一些错误或不准确的地方,希望读者批评指正。为了方便大家交流,读者可以加QQ交流群(群号:187378034)。如果大家有问题可以在群里提出,我会及时解答的。另外,笔者还会在群里及时更正书中的错误,也会及时更新书中内容。由于本书前三章比较简单,所以书中7~9章的源文件可以在随书附赠的光盘中获取。如果您有宝贵意见,欢迎发送邮件至邮箱316344618@qq.com,期待读者的真挚反馈。 致谢 首先感谢libGDX以及libGDX的游戏引擎开发团队,感谢他们为广大游戏开发者开发出如此优秀的游戏引擎。 感谢长沙理工大学,特别要感谢计算机与通信工程学院院长李峰教授在本书撰写过程在图形图像技术方面给予的技术指导。 感谢长沙理工大学计算机与通信工程学院副院长张建明副教授对本书的大力支持,在他的支持、鼓励与指导下,本书才得以完成。 感谢电子工业出版社策划编辑张迪女士,感谢她在这一段时间中始终支持本书的撰写,可以说没有张迪女士的大力支持,就不会有本书的出版。 谨以此书献给众多热爱游戏开发和libGDX的朋友们! 笔 者 2015年3月15日
目 录 第1章 初识libGDX 1 1.1 什么是libGDX 1 1.2 libGDX的历史 2 1.3 libGDX的特点 2 1.3.1 强兼容性 2 1.3.2 高效性 3 1.3.3 架构的清晰性 3 1.4 开发工具 3 1.4.1 粒子编辑器(Particle Editor) 4 1.4.2 文字生成工具(Hiero Bitmap Font Generator) 4 1.4.3 图片合并工具(TexturePacker) 5 1.4.4 项目构建工具(GDX-Setup-UI) 5 1.5 libGDX的主要功能 6 1.6 libGDX的应用 7 1.7 学习资料 8 1.8 本章小结 9 第2章 环境搭建 10 2.1 Windows系统下的开发环境配置 10 2.1.1 JDK下载及安装 10 2.1.2 开发工具下载 13 2.1.3 Eclipse插件配置 21 2.1.4 开发库下载 25 2.1.5 Gradle开发库配置 28 2.2 Mac OS系统下的开发环境搭建 31 2.2.1 开发工具下载 31 2.2.2 Gradle开发库配置 32 2.3 Windows系统环境变量配置 35 2.3.1 Python环境变量配置 35 2.3.2 Gradle环境变量配置 37 2.3.3 安卓环境变量配置 39 2.4 Mac OS系统环境变量配置 40 2.4.1 Python环境变量配置 40 2.4.2 Gradle环境变量配置 41 2.4.3 安卓环境变量配置 42 2.5 本章小结 43 第3章 Hello,libGDX! 44 3.1 libGDX项目的创建、导入及运行 44 3.2 使用Gradle命令调试项目 52 3.2.1 Desktop项目调试 53 3.2.2 Html项目调试 54 3.2.3 Android项目调试 56 3.2.4 iOS项目调试 59 3.3 libGDX多平台工程详解 64 3.3.1 Core工程目录解析 64 3.3.2 Android工程目录解析 65 3.3.3 Desktop工程目录解析 66 3.3.4 Html工程目录解析 66 3.3.5 iOS工程目录解析 67 3.3.6 多平台配置文件详解 68 3.4 本章小结 69 第4章 基础开发库 70 4.1 开发文档介绍 71 4.1.1 在线查看API文档 71 4.1.2 离线查看API文档 72 4.1.3 常用开发包介绍 73 4.1.4 官方Wiki 77 4.2 游戏生命周期 78 4.2.1 ApplicationListener接口 78 4.2.2 ApplicationAdapter类 82 4.3 纹理类 83 4.3.1 纹理类的构造方法 83 4.3.2 纹理类的常用方法 84 4.3.3 实战演练 85 4.4 精灵画笔类 87 4.4.1 SpriteBatch类的构造方法 87 4.4.2 SpriteBatch类的常用方法 88 4.4.3 实战演练 89 4.5 Pixmap类 91 4.5.1 Pixmap类的构造方法 91 4.5.2 Pixmap类的常用方法 92 4.5.3 实战演练 93 4.6 纹理区域类 95 4.6.1 TextureRegion类的构造方法 95 4.6.2 TextureRegion类的构造方法详解 96 4.6.3 TextureRegion类的常用方法 97 4.6.4 实战演练 97 4.7 精灵类 99 4.7.1 Sprite类的构造方法 99 4.7.2 Sprite类的常用方法 100 4.7.3 实战演练 101 4.8 本章小结 103 第5章 核心开发库 104 5.1 演员类 104 5.1.1 演员类的构造方法 105 5.1.2 演员类的常用方法 105 5.1.3 实战演练 108 5.2 舞台类 110 5.2.1 舞台类的构造方法 111 5.2.2 舞台类的常用方法 111 5.2.3 实战演练 113 5.3 Viewport类 116 5.3.1 Viewport类的构造方法 117 5.3.2 Viewport类的常用方法 118 5.3.3 实战演练 120 5.4 动作类 124 5.4.1 动作特效类 124 5.4.2 动作控制类 125 5.4.3 实战演练 126 5.5 动画类 131 5.5.1 动画类的构造方法 131 5.5.2 动画类的常用方法 131 5.5.3 实战演练 133 5.6 综合示例 135 5.7 本章小结 142 第6章 游戏开发工具 143 6.1 文字处理 143 6.1.1 Hiero工具用法 143 6.1.2 BitmapFont类 146 6.1.3 BitmapFont类的构造方法 146 6.1.4 BitmapFont类的常用方法 147 6.1.5 实战演练 148 6.2 图片合成工具 153 6.2.1 图片合成工具用法 153 6.2.2 TextureAtlas类 157 6.2.3 TextureAtlas类的构造方法 158 6.2.4 TextureAtlas类的常用方法 158 6.2.5 实战演练 160 6.3 粒子编辑器 163 6.3.1 粒子编辑器的使用方法 164 6.3.2 ParticleEffect类 168 6.3.3 ParticleEffect类的构造方法 168 6.3.4 ParticleEffect类的常用方法 168 6.3.5 实战演练 169 6.4 地图编辑器 173 6.4.1 游戏图层详解 174 6.4.2 地图编辑器的使用方法 174 6.4.3 TiledMap类 177 6.4.4 TiledMap类的常用方法 177 6.4.5 OrthogonalTiledMapRenderer类 178 6.4.6 OrthogonalTiledMapRenderer类的构造方法 178 6.4.7 OrthogonalTiledMapRenderer类的常用方法 179 6.4.8 实战演练 180 6.5 本章小结 181 第7章 常用系统控件 182 7.1 Skin类 182 7.1.1 JSON配置文件 182 7.1.2 Skin类的构造方法 184 7.1.3 Skin类的常用方法 185 7.1.4 实战演练 186 7.2 Button类 188 7.2.1 Button类的构造方法 188 7.2.2 Button类的常用方法 189 7.2.3 ButtonStyle类的成员变量 189 7.2.4 ButtonStyle类的构造方法 190 7.2.5 实战演练 190 7.3 Label类 194 7.3.1 Label类的构造方法 194 7.3.2 Label类的常用方法 195 7.3.3 标签样式类 196 7.3.4 实战演练 196 7.4 Image类 199 7.4.1 Image类的构造方法 199 7.4.2 Image类的常用方法 200 7.4.3 实战演练 201 7.5 CheckBox类 203 7.5.1 CheckBox类的构造方法 204 7.5.2 CheckBox类的常用方法 205 7.5.3 CheckBoxStyle类 205 7.5.4 CheckBoxStyle类的构造方法 206 7.5.5 实战演练 206 7.6 ProgressBar类 210 7.6.1 ProgressBar类的构造方法 211 7.6.2 ProgressBar类的常用方法 211 7.6.3 ProgressBarStyle类 212 7.6.4 ProgressBarStyle类的构造方法 213 7.6.5 实战演练 213 7.7 Slider类 218 7.7.1 Slider类的构造方法 218 7.7.2 Slider类的常用方法 219 7.7.3 SliderStyle类 219 7.7.4 SliderStyle类的构造方法 220 7.7.5 实战演练 220 7.8 TextField类 223 7.8.1 TextField类的构造方法 223 7.8.2 TextField类的常用方法 223 7.8.3 TextFieldStyle类 225 7.8.4 TextFieldStyle类的构造方法 225 7.8.5 实战演练 226 7.9 TouchPad类 229 7.9.1 TouchPad类的构造方法 229 7.9.2 TouchPad类的常用方法 229 7.9.3 TouchPadStyle类 230 7.9.4 TouchPadStyle类的构造方法 231 7.9.5 实战演练 231 7.10 ScrollPane类 235 7.10.1 ScrollPane类的构造方法 235 7.10.2 ScrollPane类的常用方法 236 7.10.3 ScrollPaneStyle类 237 7.10.4 ScrollPaneStyle类的构造方法 238 7.10.5 实战演练 239 7.11 List类 242 7.11.1 List类的构造方法 242 7.11.2 List类的常用方法 242 7.11.3 ListStyle类 243 7.11.4 ListStyle类的构造方法 243 7.11.5 实战演练 244 7.12 SelectBox类 246 7.12.1 SelectBox类的构造方法 246 7.12.2 SelectBox类的常用方法 247 7.12.3 SelectBoxStyle类 248 7.12.4 SelectBoxStyle类的构造方法 249 7.12.5 实战演练 249 7.13 SplitPane类 252 7.13.1 SplitPane类的构造方法 252 7.13.2 SplitPane类的常用方法 253 7.13.3 SplitPaneStyle类 254 7.13.4 SplitPaneStyle类的构造方法 254 7.13.5 实战演练 255 7.14 Tree类 257 7.14.1 Node类 257 7.14.2 Tree类的构造方法 259 7.14.3 Tree类的常用方法 259 7.14.4 TreeStyle类 260 7.14.5 实战演练 261 7.15 Window类 264 7.15.1 Window类的构造方法 264 7.15.2 Window类的常用方法 264 7.15.3 WindowStyle类 265 7.15.4 WindowStyle类的构造方法 265 7.15.5 实战演练 266 7.16 综合示例 271 7.17 本章小结 279 第8章 高级开发库 280 8.1 AssetManager类 280 8.1.1 AssetManager类的构造方法 280 8.1.2 AssetManager类的常用方法 281 8.1.3 实战演练 282 8.2 Screen类 286 8.2.1 Game类 287 8.2.2 Screen类的构造方法 287 8.2.3 Screen类的常用方法 288 8.2.4 实战演练 288 8.3 音频类 295 8.3.1 Music类 296 8.3.2 Sound类 297 8.3.3 实战演练 298 8.4 Mesh类 304 8.4.1 VertexAttribute类 305 8.4.2 VertexAttribute类的构造方法 306 8.4.3 VertexAttribute类的常用方法 306 8.4.4 Mesh类的构造方法 307 8.4.5 Mesh类的常用方法 307 8.4.6 GLSL语言 308 8.4.7 实战演练 309 8.5 Camera类 313 8.5.1 Camera类的成员变量 314 8.5.2 Camera类的常用方法 314 8.5.3 照相机原理 315 8.5.4 OrthographicCamera类 316 8.5.5 实战演练1 317 8.5.6 PerspectiveCamera类 320 8.5.7 实战演练2 321 8.6 Rectangle类 324 8.6.1 Rectangle类的构造方法 325 8.6.2 Rectangle类的常用方法 325 8.6.3 重点方法详解 326 8.6.4 实战演练 327 8.7 Net类 331 8.7.1 Net类的常用方法 331 8.7.2 HttpRequest类 332 8.7.3 HttpResponseListener类 333 8.7.4 实战演练 333 8.8 碰撞检测 337 8.8.1 MapLayers类 337 8.8.2 MapLayer类 338 8.8.3 MapObjects类 339 8.8.4 MapObject类 339 8.8.5 TiledMapTileLayer类 340 8.8.6 Cell类 341 8.8.7 实战演练 342 8.9 本章小结 346 第9章 游戏实战演练 347 9.1 游戏框架搭建 347 9.2 构建物理世界 352 9.3 刚体碰撞监听器 356 9.4 输入监听 360 9.5 传感器 362 9.6 游戏地图 365 9.7 游戏资源加载 370 9.8 自定义精灵类 372 9.9 添加星星 376 9.10 添加火焰 379 9.11 多精灵碰撞 383 9.12 木板切换 386 9.13 多相机调整 390 9.14 游戏背景 392 9.15 主场景处理 394 9.16 死亡与通关 399 9.17 音效添加 401 9.18 项目打包 403 9.18.1 PC端项目打包 403 9.18.2 安卓项目打包 405 9.19 本章小结 407