为了初始化Application必须实现ApplicationListener接口,它用来更新游戏状态(即逻辑),渲染界面,暂停游戏,保存状态,释放资源等。它也有一个处理Application声明周期事件的地方。每个应用,不管后台平台版本都必须实现ApplicationListener接口。所有平台都必须要实现这个接口。
AndroidApplication继承自Activity,起到了一个Activity的作用,但是我们并不在这个”Activity“中做太多的工作(当然可以做一些保存Context上下文之类的工作),实际的显示工作交给了一个实现了ApplicationListener接口的类来实现的,它有所有我们需要的功能:创建,渲染等。所以实际的情况是,我们在游戏中的大部分实际绘图工作都是放在这个页面进行的。
我们在上一讲的基础上,在屏幕上打印一些标识,代码如下:
package com.lichunan.libgdx.game;
import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
public class FirstGame implements ApplicationListener {
private SpriteBatch spriteBatch;
private BitmapFont bf;
@Override
public void create() {
spriteBatch = new SpriteBatch();
bf = new BitmapFont();
}
@Override
public void render() {
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
Gdx.gl.glClearColor(0f, 0f, 0f, 0f);
spriteBatch.begin();
bf.draw(spriteBatch, "Hello World", Gdx.graphics.getWidth()/2, Gdx.graphics.getHeight()/2);
spriteBatch.end();
}
@Override
public void dispose() {
spriteBatch.dispose();
bf.dispose();
}
@Override
public void pause() {
// TODO Auto-generated method stub
}
@Override
public void resize(int arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void resume() {
// TODO Auto-generated method stub
}
}
首先在create()函数中初始化一下相应的变量,否则会得到空指针。绘图用SpriteBatch,以及字体类BitmapFont,至于后者,我们很显然可以从名字就看出,它的实现是借助图片来实现字体显示的。
绘图用SpriteBatch在绘图前一定要调用begin()方法,而在调用后一定要调用end()方法,否则程序会报错。
一旦ApplicationListener开始运行,render函数就会不停执行。
Gdx.graphics.getWidth()/2,这就是Gdx提供的一些类来获取系统信息。
在dispose()函数中不要忘了对变量执行dispose()方法,在libgdx中,很多资源必须手动释放,否则一直占用着内存,很可能就此发生内存溢出的错误,而libgdx中有一个结构Disposable,一般实现了这个接口的类都需要手动回收的。