承接了上一篇文章中关于环境搭建的简单示例,这一篇我会详细讲解FirstGame和HelloGameActivity类中的代码。
一、ApplicationListener接口详解
1、简单代码示例,FirstGame.java:
package com.example.hellolibgdx; import com.badlogic.gdx.ApplicationListener; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.GL10; import com.badlogic.gdx.graphics.g2d.SpriteBatch; public class FirstGame implements ApplicationListener { // 绘图用的SpriteBatch private SpriteBatch batch; @Override public void create() { // 实例化 batch = new SpriteBatch(); } @Override public void render() { // 清屏 Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); Gdx.gl.glClearColor(0f,0f,0f,0f); batch.begin(); batch.end(); } @Override public void resize(int arg0, int arg1) { } @Override public void pause() { } @Override public void resume() { } @Override public void dispose() { batch.dispose(); } }
我们可以看到,FirstGame类继承自ApplicationListener接口,为了初始化Application必须要实现
ApplicationListener这个接口,那么这个接口到底有什么用呢?
实现了这个接口的类都有一个共同的特点,它们都会经历一个创建(create)、渲染(render)、暂停
(pause)、继续(resume)、销毁(dispose)等一系列过程,发生对应时间的时候会自用调用相应的函
数。特别是render()函数,它是一个系统在不停调用的函数(当然这个实例满足正在运行的条件),因此我们
可以把很多操作放在render()函数中实现,不过千万注意不要进行耗时的操作以免堵塞UI线程。
2、我们来观察一下ApplicationListener接口的生命周期,如下图所示:
4、看完了生命周期图和每一个方法的作用,那么我们再来分析一下上面的代码:
<1> 首先我们要记得在create()方法中初始化一下相应的变量,否则会得到空指针;
<2> 在render()方法中有一个非常重要的地方,就是绘图用SpriteBatch在绘图前一定要调用begin()方法,而在调用
后一定要调用end()方法。否则程序都会报错,为什么要这么做呢?
原因也是很显然的,一旦ApplicationListener开始运行,render()方法就会不停执行,里面的语句也一样被不停地执行;
<3>
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
Gdx.gl.glClearColor(0f,0f,0f,0f);
二、AndroidApplication类详解
1、程序的入口类,HelloGameActivity.java:
package com.example.hellolibgdx; import android.os.Bundle; import com.badlogic.gdx.backends.android.AndroidApplication; public class HelloGameActivity extends AndroidApplication { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initialize(new FirstGame(), false); } }
2、我们查询官方的文档,可以看到,如下图所示:
我们可以很清楚的看到AndroidApplication类继承自API中的Activity,因此我们使用它也需要在
AndroidManifest.xml清单资源文件中去注册它,既然AndroidApplication继承自Activity,那么是不是可
以像其他Activity一样使用Intent进行跳转呢?答案是肯定的,不过事情也并没有这么简单,我会在后面的文
章跟大家讨论这个问题。
3、
initialize(new FirstGame(), false);
至于这条语句,在这里跟大家解释一下,这是启动libgdx的一个必备的条件,不执行该语句libgdx就无法启动,
<1> 第一个参数是一个实现了ApplicationApplication接口的类的实例;
<2> 第二个参数如果设为true,则在opengl 2.0可用的情况下会使用opengl 2.0。
这就已经完成了libgdx程序的编写了,当然源码中需要加入的各种Jar包,这里就不赘述了,不清楚的同学可以
参考前两篇的文章。
三、运行的效果图
因为没有写实际的东西,所以显示出的效果就是一个黑色的背景
好的,整个这一章的内容到这里就结束了,下一篇会更加精彩,不容错过,谢谢支持!
源码下载地址(源码与教程中演示代码稍微不符,请参照教程简单的改动即可)