libGDX移动游戏开发从入门到精通(txt+pdf+epub+mobi电子书下载)


发布时间:2021-01-24 06:34:18

点击下载

作者:黄俊东

出版社:人民邮电出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

libGDX移动游戏开发从入门到精通

libGDX移动游戏开发从入门到精通试读:

前言

写作初衷

从创新工场-涂鸦移动离职以后,我一直想把自己所学到的东西总结一下,以帮助更多想走上或者准备走上游戏开发这条道路上的人。很庆幸地接到了出版社的约稿,便愉快地决定要把自己一路走来所学到的知识做一个系统的总结,并尝试用一种更容易理解的方式把它们讲出来,以让更多的读者少走一些弯路,可以在尽可能短的时间内学到尽可能多的知识。

当我刚开始学libGDX游戏引擎的时候,对于很多自学的人来说,我应该是很幸运的了。因为当时身边有很多经验很丰富的同事可以请教。虽然这样,依然感觉到libGDX的教程少之又少,学习起来困难重重。整个过程大部分都是以一个初学者的水平一点一点从那晦涩难懂的英文libGDX官方教程中学习。所以当自己有能力去做些什么的时候,我很乐意用自己微薄的能力去为后来的学习者做些什么。这就是我写这本书的初衷。

作为一个优秀的游戏引擎,libGDX不知不觉也走过了好几个年头。从一开始的一个不怎么起眼的小项目发展到现在拥有众多使用者的项目,从第一个bug不少的版本发展到较为稳定的0.9x版本,再到后来的1.x版本,开发者们能够真真切切地感受到libGDX的每一步成长。

作为一个游戏引擎,libGDX支持使用Java语言进行游戏开发,这让众多爱好游戏开发,但又苦于使用门槛过高的其他语言进行游戏开发的开发者看到了希望。不仅如此,libGDX还兼容多种平台,包括Android、iOS、Html5、PC。作为一个游戏引擎,libGDX让使用Android原生进行开发的开发者们从SurfaceView中解脱出来,开发效率得到极大的提高。本书特色1.内容实用、详略得当,符合初学者的认知规律

本书内容涵盖了使用libGDX进行游戏开发所必须掌握的知识,其中包

括但不限于:libGDX的架构、libGDX UI编程、libGDX配套的开发工具、libGDX在一些问题上的解决方案。从内容结构上非常注重知识的实用性和可操作性。必须掌握的细节处绝不吝惜笔墨、甚至细致到每一次的鼠标单击;仅需要大致了解的内容绝不铺张浪费纸张、整体结构的描述提纲挈领。这样的安排注重了只介绍初学阶段必备知识的深入了解,需要大致了解的知识也能够有所认识,这种由浅入深、循序渐进地讲授遵循和尊重初学者对知识的认知规律。2.实例驱动,特别适合初学者阅读

本书每介绍一个基本知识点,都会通过一个难度适中的实例来帮助读者加深对该知识点的理解,从而能够举一反三。而且,每一个实例作者都会配以详细的注释,帮助读者更好地理解这个实例中每一行代码的意义,从而达到“知其然”,更要“知其所以然”的目标。3.项目接近真实的商业开发

本书中所介绍的两个项目存在于真实的商业开发中。其中捡金币的游戏模型应用广泛。2014年百度在圣诞节期间的一些推广活动就是嵌入到这种模式的游戏中实现的。而其中的2048游戏更是在各大应用商店中广受好评。本书内容及体系结构第1章 libGDX简介

本章对libGDX游戏引擎进行了较为详细的介绍。包括libGDX的历史、功能、特点以及libGDX都有哪些配套的开发工具。让读者对libGDX有一个感性的认识,为后面的章节打下基础。第2章 libGDX的架构分析

本章详细介绍了libGDX的生命周期、模块组成、libGDX中可以使用的输出日志的方式以及一些其他的辅助工具。通过本章的学习,读者对使用libGDX进行游戏开发时所编写的代码架构有了较为直观的认知,清楚每一个生命周期函数中都应该完成哪些操作。第3章 数据存储

本章详细介绍了使用libGDX进行游戏开发时所需要用到的一些游戏的数据存取的一些方式。这一章知识的讲解不局限于libGDX,也详细介绍了Android中的操作方式。因为在开发的时候,这两种经常会配合着使用。第4章 libGDX中的UI编程

本章详细介绍了使用libGDX来进行UI编程时所需要的知识。其中包括对SpriteBatch、BitmapFont基础类的详细介绍。这些知识有利于更好地理解和掌握本书第5章的内容。毕竟本章的知识其实是第5章所介绍到的内容的底层实现。第5章 libGDX中的常见UI组件

本章是站在控件的高度去讲解UI编程。其中所涉及的控件包括Image、Button、Slider、SplitPane等常见又实用的控件。熟练掌握这些控件的使用,能让我们的开发更有效率,也让我们能够编写出符合我们项目需求的控件。第6章 libGDX中的事件处理与音效

本章详细介绍了libGDX中的事件处理与音效。事件处理是整个游戏的基础,它能让游戏从一个状态切换到另外一个状态。而音效更是能为一个游戏加分不少。通过本章的学习,读者将掌握更上一层楼的技能与技巧。第7章 资源加载器、游戏界面的跳转以及物理引擎

本章详细介绍了资源加载器、游戏界面的跳转以及libGDX中的物理引擎。资源加载器所对应的异步加载方式常常被运用到大型游戏中。游戏界面的跳转是一个游戏中状态切换自然而然的效果。而物理引擎则在体育类游戏中随处可见。第8章 libGDX中的UI编辑器

本章详细介绍了如何让CocosStudio这个UI编辑器来为libGDX服务,从而弥补libGDX在UI编辑器上的不足。通过本章的学习能够让读者比较轻松地处理游戏元素较多的情况。第9章 小游戏实战——捡金币

本章详细介绍了如何使用本书中所介绍到的知识去开发出一个具有较强趣味性的游戏——捡金币,该游戏模式被广泛应用各类的网页推广中。第10章 休闲类游戏——2048

本章详细介绍了一个成熟的休闲类游戏——2048的开发。首先分析了整个项目的组成,让读者对整个游戏的架构有一个清晰的认识。接下来把这个游戏中所涉及的每一部分都在详细的介绍中实现,并在最后提出了一些优化与改进的方向。本书读者对象● libGDX初级及中级开发者,了解Java语言和游戏开发的读

者。● libGDX零基础,但具有一定的SurfaceView开发经验的工程

师。● 游戏开发零基础,但爱好游戏开发的工程师。● 爱好游戏开发的大学生。致谢

感谢南京邮电大学物联网学院院长孙知信教授在我编写本书时所给予的鼓励,也感谢给予过我很多帮助的同事和朋友们。

本书在编写过程中,我虽然具备一些开发经验,但是水平有限,书中不免有错误之处,望读者批评指正。第1章libGDX简介

目前,手游在整个游戏的市场份额上所占的比例越来越大。腾讯系的手游更是一度占领了苹果App Store前十名超半数的席位。现在就让我们走进libGDX这个游戏引擎的世界,开发出一款属于自己的游戏。1.1 libGDX介绍

在本节中,主要简单介绍一下libGDX这个游戏引擎,包括其特点、配套的开发工具等,让读者对libGDX这个游戏引擎有一个的感性的认识。1.1.1 libGDX的特点

libGDX是一个跨平台的2D/3D游戏开发框架,它由Java/C/C++语言编写而成。它基于Apache LicenseVersion 2.0协议,对商业使用和非商业使用均免费,代码托管于Github中,最新版本为1.5.4。开源的游戏框架并不少见,但是libGDX的优势是相当明显的,主要是体现在以下几个方面:1.强兼容性

libGDX兼容多种平台系统(Windows、Linux、Max OS X、Java Applet、Javascript/WebGL),包括移动系统Android(1.5版本+)和iOS。在Android阵营和相关市场日益扩大的情况下,对于Android平台的支持使libGDX的使用者越来越多。另外,基于RoboVM可以实现iOS兼容。

极强的兼容性为调试和开发提供了便利。你可以使用Android上面同样的代码在桌面PC上面编写、测试、调试你的应用(也就是说,你不需要打开Android模拟器,就可以调试用libGDX引擎写的游戏应用)。它剥离了常见的Windows之间/ Linux应用程序和一个Android应用程序的区别。一般的开发过程是尽可能地停留在桌面PC上,同时周期性地检查你的当前代码是否仍然能在Android上运行。2.高效性

libGDX主要是用Java写的,其中也掺杂了一些C/C++代码,这些代码是为了处理一些对性能要求很高的操作,比如物理引擎或者音频处理。作为用户,你只需要关注Java的封装就可以了,它已经把所有的本地代码封装好了。相比于其他android游戏引擎,libGDX的效率优势十分明显。3.架构清晰

libGDX的主要构成,如图1.1所示。图1.1 libGDX的主要构成

libGDX由audio、files、graphics、math、physics、scenes、utils这些主要模块所组成,它们对应了libGDX中的常用函数、接口、音频操作、输入/输出、文件操作,2D/3D渲染及libGDX绘图相关运算、网络模块。

它提供了便于设计游戏的清晰架构,如图1.2所示。图1.2 libGDX的架构4.封装

libGDX对于物理引擎的封装也是让人惊讶的。它使用jni封装了box2d的C++版本,使得其运行效率比其他同级的物理引擎如jbox2d更快。现在流行的几个包含物理引擎的Android游戏引擎(如Andengine、Rokon等),几乎都在用libGDX所封装的物理引擎。如果你的游戏(特别是针对Android平台的)准备使用物理引擎,请优先考虑libGDX。1.1.2 libGDX中的工具

libGDX具有较为完善的配套的开发工具,如粒子编辑器(Particle editor)、文字生成工具(Hiero bitmap font generator)、图片合并工具(Texture packer)等。这些所涉及的工具都会在以后的章节中陆续介绍。现在主要是贴出其软件界面,让大家先对其有一个直观的印象。1.粒子编辑器(Particle editor)

粒子编辑器一个很明显的作用就是可以给游戏的画面添加更炫丽的效果。无论是大型游戏还是中小型游戏,基本都会有“每日登录”这一模块,而这一模块中,就经常使用到粒子效果,如图1.3所示。图1.3 粒子编辑器的界面2.文字生成工具(Hiero bitmap font generator)

借助Hiero bitmap font generator,可以生成游戏中需要用到的字体文件。在显示游戏中的文字信息时,通常需要用到该字体文件。文字生成工具如图1.4所示。图1.4 Hiero的界面3.图片合并工具(Texture packer)

Texture packer的主要作用是将若干张小图合并为一张大图。这样在方便资源管理的同时,也尽可能地降低了GPU内存的浪费,如图1.5所示。图1.5 Texture packer合并工具1.1.3 libGDX的历史

2009年中期,项目开始,初始名称为AFX。

2010年3月6日,项目开源,代码托管在Google Code上。

2012年5月,市场占有率超过1.24%,超过了当时的Unity、AndEngine、Cocos2D、Corona和Marmelade。

2012年,Google Ingress使用了libGDX项目。

2013年,添加3D API支持。

2014年4月20日,1.0正式版发布。

此后libGDX版本的更新比较频繁,截止到2015年3月24日。libGDX已经更新到了1.5.4版本。libGDX的作者之一Mario Zechner,也是《Beginning Android Games》一书的作者之一。1.1.4 我的libGDX版本

这本书主要围绕libGDX 0.9.8来编写。与0.9.8版本相比,libGDX1.x具有以下特点。

1.更新了基于Gradle项目的安装,不需要更多的jars,支持所有平台的简单打包。

2.移除了对OpenGL ES 1.x的支持,支持OpenGL ES 3.0。

3.移除了大量Android后端的集群,要求最低Android版本是Android 2.2。

4.Box2D转移到了扩展中。

5.大幅度的改进了Scene2D,比如viewport enhancement。

6.更新了libGDX repo、网站和wiki,移除了旧的setup UI。

7.移除了音频和图像扩展和demo都放在了仓库中。

可以看出与0.9.8版本相比,使用libGDX 1.x开发起来将会更加简便。但是其最致命的缺点是移除了对OpenGL低版本的支持而不是选择兼容OpenGL低版本,这就导致市面上相当一部分使用OpenGL1.x手机的用户将无法运行使用libGDX1.x开发出来的游戏。而这一部分用户的丢失所带来的收益上的巨大损失是很多游戏开发商所无法接受的。所以,大部分的游戏开发商还是选择libGDX 0.9.8来进行游戏开发。这也是本书选择libGDX 0.9.8来进行讲解的主要原因。与libGDX 0.9.8相比,libGDX 1.x的主要API的改动较小,它们之间的大部分内容都是类似的。1.2 搭建libGDX开发环境

在本节中,我们将介绍搭建libGDX的开发环境。本节是大家使用libGDX进行游戏开发的基本准备工作。需要注意的是,在此之前应该把JDK下载、安装并配置好。同样的,eclipse下的开发环境也需要配置好。1.2.1 libGDX下载(1)登录官网:http://libgdx.badlogicgames.com/,单击红色框选中的“Download”,如图1.6所示。图1.6 libGDX的官网(2)单击“Download”选项后你会看到以下界面,单击其中的“Releases”选项,如图1.7所示。图1.7 libGDX下载界面的入口(3)这时你会看到以下界面,这个就是libGDX的各个版本的下载页面了,选中0.9.8的版本,如图1.8所示。(4)单击之后便会自动进行下载。图1.8 libGDX各个版本的下载页面1.2.2 Android项目的新建(1)打开eclipse。单击其中的“File”按钮,如图1.9所示。图1.9 eclipse中的File按钮(2)在出现的选项卡中选择“New”→“Android Appliacation Project”。这时候便会出现以下的选项卡,按图1.10进行填写。图1.10 新建Android项目的选项卡

选项卡中各个选项的含义如下。● Project Name:eclipse项目名称,即在eclipse工作空间中文件夹

的名称。● Application Name:Android应用程序的名称,该名称会显示

在Android设备上。● Package Name:包名。应用商店根据该包名区分不同的应

用。● Minimum required SDK:程序所支持SDK的最低版本。● Target SDK:程序的目标SDK版本。● Compile SDK:程序编译时所使用的SDK版本。(3)完成选项卡的配置后,一直单击“Next”按钮,直到“Next”按钮无法单击,这时单击“Finish”按钮即可完成Android项目的创建,如图1.11所示。图1.11 新建项目后的效果图1.2.3 libGDX的安装

所谓的libGDX的安装,就是把libGDX的压缩包解压出来,并把其中的一些jar包及目录集成到Android项目中。(1)下载libGDX的压缩包及解压出来的文件夹,如图1.12所示。图1.12 下载好的libGDX压缩包及解压后的文件夹(2)进入解压后的文件夹,选中图1.13中选择的文件。图1.13 解压后的libGDX安装包里面的内容(3)将其复制到自己新建的Android项目中的libs目录下,如图1.14所示。图1.14 将libGDX的jar包添加到项目后的效果

libs中的android-support-v4.jar是原本就有的,它是Android的兼容性包,其作用是让在Android 4.0系统上开发的应用能够在API Level 4的Android系统中正常运行。而剩下的文件及文件夹则是新导进来的,是在Android上使用libGDX进行游戏开发所需要的jar包及目录。(4)这时,按住“Ctrl”键,然后单击左键选中“gdx.jar”和“gdk-backend-android.jar”,然后单击右键,在出现的选项卡中选择“Build Path”→“Add to Build Path”。(这一步如果不清楚的同学请参考一下光盘里面的视频教程。)(5)单击左键项目名(例如,我们的第一个项目就叫作HelloWorld,这里就单击左键选中它),然后单击右键,在出现的选项卡中选择“Builde Path”→“configure Build Path”,在选项卡切换到“Order and Export”后,把其中的红色框选中的项目的钩都打上,如图1.15所示。图1.15 Order and Export界面需要选择的选项(6)切换到“Libraries”选项卡,把其中“Android Private Libraries”的选项删除,如图1.16所示。图1.16 需要删除的选项(7)到这里,就完成了在Android项目中使用libGDX进行游戏开发的环境配置。1.3 开始第一个libGDX游戏

经过1.3节以前的内容,我们已经搭建好了使用libGDX进行游戏开发的基本环境。那么这一节,就带大家用libGDX来写自己的第一个HelloWorld程序。1.3.1 第一个HelloWorld程序的编写

在这个HelloWorld程序中,将带大家使用libGDX把一张图片显示出来。通过这个HelloWorld的程序,让读者们对使用libGDX来进行游戏开发的程序结构有大致的了解。

具体步骤如下(考虑到有的读者可能之前没有开发经验,所以在这里把新建类的方法详细记录下来,但在以后章节的步骤中,将不会重复演示新建类的步骤。有经验的读者可以直接跳过这一部分阅读代码)。(1)新建MainActivity类(把原来生成项目时自带的MainActivity.class删掉)。在这里完成一些初始化工作,是程序的入口。首先,单击左键包名,如图1.17所示。图1.17 需要单击左键选中的包(2)然后单击右键,在出来的选项卡中选择“New”菜单项,然后在二级选项卡中选择“Class”选项,这时就能看到以下界面,在“Name”菜单项中输入新建类的名字(在这里,我起了MainActivity这个名字,建议大家和我保持一致,这样便于今后找错),输完类名以后,单击“Browse”按钮,过程如图1.18所示。图1.18 MainActivity类的新建(3)单击“Browse”按钮后,会出现以下界面,在框中输入“AndroidApplication”,并单击选中备选框中在HelloWorld项目里面的那一个“AndroidApplication”,如图1.19所示。图1.19 Maintivity需要继承的类(4)然后单击“OK”按钮,在返回的界面中,单击“Finish”按钮即可完成MainActivity类的创建。(5)新建MyGame类。在这里主要完成游戏的主要逻辑。首先在create()方法里面完成对象的初始化操作,如texture的初始化和bacth的初始化。然后在render()方法里面调用batch的draw(...)方法把图片绘画出来。

MyGame类的创建方法大致相同,有一点区别就在于:MainActivity类是继承于一个类,所以在新建MainActivity类的时候,单击的是“Browse”按钮,而MyGame类是实现了一个接口,那么这时候应该单击的是“Add”按钮,如图1.20所示。图1.20 MyGame类的新建(6)将这个Demo所需要的图片资源test1.jpg放到assets目录下的data目录下(data是在assets目录下新建的目录),如图1.21所示。图1.21 资源的导入

MainActivity类和MyGame类的具体代码如下:

MainActivity类主要完成一些游戏相关的初始化操作。需要注意的是,不要去掉onCreate方法里面的super.onCreate(...)方法。public class MainActivity extends AndroidApplication {  @Override  protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);//调用Android原生的onCreate()方法    initialize(new MyGame(), false);//完成相应的初始化工作   }}

MyGame类主要是通过实现“使用SpriteBatch把Texture画出来的逻辑”,来对使用libGDX开发有一个感性的认识。需要注意以下几点:● texture = new Texture(Gdx.files.internal("data/test1.jpg"));里所用

到的test1.jpg的长度与宽度一定要是2的整次幂。● 每一帧在执行SpriteBatch的绘画操作之前一定要先执行清屏操

作。Gdx.gl.glClearColor(1, 1, 1, 1);//把屏幕设置成白色     Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);//清屏public class MyGame implements ApplicationListener {   Texture texture;//纹理。简单理解成图像信息的容器   SpriteBatch batch;//简单理解成画笔   @Override   public void create() {     /**      * Gdx.files.internal("data/test1.jpg")这行代码的意思如下:      * 在assets目录下的data目录中找到名为test1.jpg的图片,然后返回一个      * FileHandle类型的对象,用于生成Texture类型的对象      */     texture = new Texture(Gdx.files.internal("data/test1.jpg"));// texture = new Texture(Gdx.files.internal("data/shopabg.jpg"));     batch = new SpriteBatch();//用构造函数生成一个SpriteBatch对象   }   @Override   public void dispose() {     // TODO Auto-generated method stub}     @Override   public void pause() {     // TODO Auto-generated method stub     }     /**   * render()方法每一帧都会执行   */   @Override   public void render() {     Gdx.gl.glClearColor(1, 1, 1, 1);//把屏幕设置成白色     Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);//清屏     batch.begin();//开始绘制     /**      * texture:需要显示出来的纹理信息      * 第二个参数:需要显示出来的位置X轴坐标      * 第三个参数:需要显示出来的位置Y轴坐标      * 第四个参数:这幅图片显示出来的宽度      * 第五个参数:这幅图片显示出来的高度      */     batch.draw(texture,0,0,480,800);//执行绘制操作     batch.end();//结束绘制   }     @Override   public void resize(int arg0, int arg1) {     // TODO Auto-generated method stub     }     @Override   public void resume() {     // TODO Auto-generated method stub     }}1.3.2 在Android设备上调试(1)将自己的手机与电脑连接。一个比较好的检测自己的手机是否和电脑连接成功的方法就是利用一些辅助工具,如“×××手机助手”等。如果你的手机已经和电脑成功连接,那么这时候会显示“已通过USB连接成功”的字样,如图1.22所示。图1.22 手机的连接(2)手机和电脑成功连接之后。单击左键选中自己要调试的项目,如在这里需要调试的是HelloWorld程序。然后再单击左键eclipse中一个绿色小圆圈中有一个白色三角形的按钮,如图1.23所示。图1.23 项目的运行(1)(3)如果是第一次运行该程序,会弹出以下对话框,单击左键选中其中的“Android Application”选项,然后再单击“OK”按钮,如图1.24所示。图1.24 Run As对话框(4)要确保自己的项目中的“Android private libraries”已经被移除,否则会报错。如图1.25所示,就是还没有将“Android private libraries”移除掉的情况。(移除“Android private libraries”的方法在1.2.3小节中已经介绍过)。图1.25 需要删除的项目(5)经过上面步骤后,会弹出一个对话框,以选择运行该程序的Android设备,单击选中设备并单击“OK”按钮,如图1.26所示。图1.26 选择程序所运行的设备(6)程序便会开始运行。运行效果如图1.27所示。图1.27 运行效果图1.3.3 桌面调试环境的搭建

通过1.3.2小节的学习,我们已经能在Android设备上运行我们的第一个HelloWorld程序了。作为一个跨平台的游戏引擎,libGDX还允许在桌面上调试程序,这极大地缩短了调试程序的时间。那么这一节就来学习一下桌面调试环境的搭建。(1)新建一个Java项目(在之前的章节中我们已经学习了如何新建一个Android项目,它们的大部分步骤都是差不多的)。左键单击“File”→“New”→“Java Project”,便会弹出一个选项卡。在这个选项卡中填写好Java项目的项目名(例如,在这里我就把新的Java项目的项目名定义为HelloWorldDesktop),最后单击“Finish”按钮即可,如图1.28所示。图1.28 Java项目的新建(2)在下载好的libGDX的压缩包的解压包中找到以下4个jar包,如图1.29所示。图1.29 桌面项目所需要的jar包(3)然后把它们添加到刚刚新建好的Java项目的根目录下,如图1.30所示(图1.30中的libs目录也是自己手动新建的)。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载