第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所示。
图1.8 libGDX各个版本的下载页面
(4)单击之后便会自动进行下载。
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目录也是自己手动新建的)。
图1.30 桌面项目中libGDX的jar包的导入
(4)按住“Ctrl”键,单击左键选中图1.30中的4个jar,然后单击右键,在弹出的选项卡中选择“Build Path”→“Add To Build Path”。将jar包成功添加到Build Path以后,会看到自己的项目中多了一个名为“Referenced Libraries”的条目,如图1.31所示。
图1.31 将jar包导入项目后的效果
(5)将Android项目中用到的资源复制一份到Java项目中,如图1.32所示。
图1.32 桌面项目与Android项目的资源的对应关系
(6)把Java项目和Android项目关联起来。单击左键,选中Java项目(例如这里是HelloWorldDesktop),单击右键,在出来的选项卡中选择“Build Path”→“Configure Build Path”。在出来的选项卡中选择“Project”选项,然后单击“Add”按钮,如图1.33所示。
图1.33 依赖项目的配置(1)
(7)单击“Add”按钮后,会出现一个选项卡,在这里选择自己需要关联的项目,并单击“OK”按钮即可,如图1.34所示。
图1.34 依赖项目的配置(2)
(8)完成上一步操作后会自动返回到上一个选项卡,在该选项卡同样单击“OK”按钮即可完成项目的关联。
(9)在Java项目中新建一个名为Main的类。在桌面项目中,只需要编写少量的代码即可。代码如下:
public class Main { public static void main(String[] args) { /** * LwjglApplication.LwjglApplication(ApplicationListener listener, String title, int width, int height, boolean useGL2) * 这个构造函数的作用是:创建一个lwjgl后台应用。这个应用的标题为title,宽度为width,高度为 height * listener: 传入自己在Android项目中所写的程序ApplicationListener的类的对象,在 这里是MyGame类的对象 * title: 这个应用的标题 * width: 宽度 * height: 高度 * useGL2: 当这个参数设置为true的时候表示,当Android设备的OpenGL2.X可用的时候,将使用 OpenGL2.X。考虑到要兼容全球大部分的手机,这个参数一般设置为false */ new LwjglApplication(new MyGame(), "HelloWorld",480,800, false); } }
(10)运行Java项目,进行桌面调试。步骤和运行Android项目一样,如图1.35所示。
图1.35 桌面项目的运行
(11)名为“Run as”的选项卡只有在第一次运行该项目时才会弹出,在以后的运行中都不会弹出。单击“OK”按钮后,会弹出一个界面,按图1.36所示进行操作即可。
图1.36 桌面项目的运行
(12)桌面调试的效果。经过上述操作,就能看到程序在电脑端运行的效果,如图1.37所示。
图1.37 桌面项目运行的效果
到这里就成功地搭建好了桌面调试环境。
1.3.4 HelloWorld程序的简单分析
通过前面的学习,我们已经对使用libGDX来进行游戏开发有了一定的认识,并且利用libGDX这个游戏引擎写出了自己的HelloWorld程序。下面对这个HelloWorld程序进行一下简单的分析。
1.MainActivity:这个类属于Android原生与libGDX的桥梁。在这里完成一些基本的初始化操作。
2.MyGame:这个类是libGDX的入口类,在这里开始编写整个游戏的逻辑。
3.当配置桌面调试环境的时候,记得要把Android项目中用到的资源复制一份到Java项目中。同样也需要把libGDX中相应的jar包复制一份到Java项目中。桌面项目中的类的代码编写量比较小——一行即可。
/** * LwjglApplication.LwjglApplication(ApplicationListener listener, String title, int width, int height, boolean useGL2) * 这个构造函数的作用是:创建一个lwjgl后台应用。这个应用的标题为title,宽度为width,高度为 height * listener: 传入自己在Android项目中所写的那一个程序ApplicationListener的类的对象,在 这里是MyGame类的对象 * title: 这个应用的标题 * width: 宽度 * height: 高度 * useGL2: 当这个参数设置为true的时候表示,当Android设备的OpenGL2.X可用的时候,将使用 OpenGL2.X。考虑到要兼容全球大部分的手机,这个参数一般设置为false */ new LwjglApplication(new MyGame(), "HelloWorld",480,800, false);
4.在清屏的时候,不要只写Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT)。只写这一句,Group在visible和unvisible之间切换时有可能会导致背景变白(通常情况下,在没有背景图时,游戏的背景应该是黑色)。所以清屏代码应该加上:
Gdx.gl.glClearColor(1, 1, 1, 1); //把屏幕设置成白色。不要把这一句漏了 Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); //清屏
1.4 运行libGDX的官方Demo
在1.3节中,我们已经能够编写自己的第一个libGDX的HelloWorld程序了。在学习libGDX这个游戏引擎的时候,libGDX官方还提供了一些例子,通过这些例子,我们能学习到别人是怎么架构和设计一个游戏的,以及别人对于细节的处理,这对于初学者来说,是很好的资源。这一节就来学习怎么利用好这些资源。
1.4.1 libGDX的官网
进入官网,常见的方式有两种。
1.直接在地址栏中输入:http://libgdx.badlogicgames.com/。
2.在百度中搜索“libGDX”,出现的第一个选项即是libGDX的官网,如图1.38所示。
图1.38 在百度中搜索的效果
单击进去以后,看到的就是libGDX的官网了,如图1.39所示。
图1.39 libGDX官网的主要选项
以下对其主要栏目做一下解释。
News:里面是libGDX的一些新闻。
Features:里面是libGDX的一些特性。
Download:在这里可以下载各个版本的libGDX。
Source:libGDX的一些源码。
Documentations:在这里有libGDX的一些文档。
Gallery:里面列出了许多使用libGDX游戏引擎所开发的优秀游戏。
Community:里面是libGDX的论坛。
一般情况下,主要访问Download、Documentations和Source这几个栏目。
1.4.2 Demo的下载演示
(1)进入到libGDX的首页以后,单击“Documentation”栏目,然后在出来的界面中向下移动,单击“Read wiki”,如图1.40所示。
图1.40 官网中的“Read the wiki”选项
(2)单击“Read wiki”后,在出来的选项中找到“Running Demos”,如图1.41所示。
图1.41 “Running Demos”选项
(3)单击“Running Demos”后,就可以看到libGDX提供的一些Demo,如图1.42所示。
图1.42 可以下载的Demos
(4)选择自己想要学习的demo,单击进去,找到并单击其中的“Download ZIP”即可完成demo的下载,如图1.43所示。
图1.43 “Download zip”按钮
1.5 其他的一些准备工作
通过学习前面的知识,我们已经学会写一个libGDX的HelloWorld程序,并且学会了在Android平台和桌面上调试自己的libGDX程序。但是在很多情况下,我们还需要看Android的源码、libGDX的源码、直接打开可运行的jar包。这一节就来讲解这些知识。
1.5.1 关联Android源码
Android系统也是由许许多多的代码组成的,这些代码也很有可能会有错误。在遇到一个问题的时候,除了我们自身的原因,还有可能是别人给我们提供的代码本身就是错误的。所以,在开发的时候,经常需要去看一下别人的代码都是怎么写的,有没有错误。
(1)在这之前要先确保你已经利用SDK Manager下载好你所使用的Android版本的源码,下载界面如图1.44所示。
图1.44 SDK Manager的下载界面
(2)没有关联源码前,按住“Ctrl”键,单击MainActivity中onCreate()中的super.onCreate(), Main Activity中的代码情况,如图1.45所示。
图1.45 MainActivity里的onCreate()方法
若没有关联源码,会出现图1.46所示的界面。
图1.46 无法找到源码的效果
(3)单击左键选中项目,然后单击“Project”→“Properties”→“Java Build Path”→“Libraries”→展开“Android 4.3”(我的Android是4.3版本,所以这里是Android4.3)→展开“android.jar”→选中“Source attachment”→单击右边的“Edit”按钮,如图1.47所示。
图1.47 关联Adroid源码的步骤(1)
(4)然后在弹出来的对话框中选择“External locaition”→“External Folder”。这时候选择自己事先下载好的Android源码即可,如图1.48和图1.49所示。
图1.48 关联Adroid源码的步骤(2)
图1.49 关联Adroid源码的步骤(3)
(5)单击“OK”按钮即可完成Android源码的关联。需要注意的是,关联源码的过程可能有点久,耐心等待一下即可。
(6)下面测试这个程序。当再次按住“Ctrl”键,单击MainActivity中的onCreate()中的super.onCreate()。出现的界面如图1.50所示。
图1.50 关联Adroid源码成功后的效果
如果出现这个界面,就证明关联Android源码成功了。以上就是Android4.3版本中的onCreate()方法的实现。
1.5.2 libGDX源码的关联
(1)在关联libGDX源码之前,按住“Ctrl”键的同时,单击左键“Texture”这个类,如图1.51所示。
图1.51 关联libGDX源码前的效果(1)
假如还没有关联libGDX源码,那么会出现如图1.52所示的界面。
图1.52 关联libGDX源码前的效果(2)
(2)关联源码。先去之前下载好的libGDX的压缩包的解压包中找到所需要的jar包,如图1.53所示。
图1.53 关联libGDX源码的步骤(1)
(3)把里面的gdx-sources.jar、gdk-backend-android-sources.jar包复制到Android项目中的libs目录下(与之前所导进去的jar包处于同一级目录),如图1.54所示。
图1.54 关联libGDX源码的步骤(2)
(4)单击左键选中项目,然后在出来的选项卡选择“Build Path”→“Configure Build Path”,这时候按图1.55所示步骤进行操作即可完成libGDX源码的关联。
图1.55 关联libGDX源码的步骤(3)
同样地,按照以上步骤即可完成gdx.jar的源码的关联。
(5)测试。完成libGDX的源码的关联后,按住“Ctrl”键,同时单击左键“Texture”,将会看到以下界面,如图1.56所示。
图1.56 关联libGDX源码成功后的效果
需要注意的是,关联源码时在自己的项目中不能包含“Android Private Libraries”这个选项,否则依然无法查看源码。
1.5.3 直接打开.jar文件的配置
(1)修改.jar文件的默认打开方式。在这里用来演示所用的.jar文件,是我们使用libGDX进行游戏开发时很重要的合图工具gdx-texturepacker.jar。其下载地址是:https://code.google.com/p/libgdx-texturepacker-gui/downloads/list。建议大家下载3.2.0的版本,因为这本教程中演示时所使用到的是3.2.0的版本的gdx-texturepacker,这时候我们选择3.2.0的版本进行下载,如图1.57所示。
图1.57 texturepacker的下载
(2)单击右键“gdx-texturepacker.jar”将其默认打开方式修改为“javaw.exe”(它在Java的安装路径下的bin目录中,例如我的javaw.exe就在C:\Program Files (x86)\Java\jdk1.7.0_21\bin中),如图1.58所示。
图1.58 直接打开texturepacker的步骤(1)
(3)修改注册表。通过上面的步骤后,还不能双击运行.jar文件。在Windows开始菜单的搜索框中输入“regedit”,如图1.59所示。
图1.59 直接打开texturepacker的步骤(2)
(4)双击运行“regedit”,这时会出现一个注册表编辑器。在注册表编辑器中,找到“HKEY_CLASSES_ROOT\Applications\javaw.exe\shell\open\command”,在其中文件打开命令中加入参数“-jar”(无引号),修改后的数值类似:“"C:\Program Files\Java\jre7\bin\javaw.exe" -jar"%1"”(只需要添加-jar参数,无需修改其他信息),保存并退出注册表编辑器,如图1.60所示。
图1.60 直接打开texturepacker的步骤(2)
(5)测试程序。双击运行“gdx-texturepacker.jar”,你会看到图1.61所示的界面。
图1.61 成功双击运行.jar文件
这就说明我们已经成功地完成相应的配置。