libgdx游戏引擎(二)之ApplicationListener接口介绍

来源:互联网 发布:外文电子图书数据库 编辑:程序博客网 时间:2024/05/22 01:30

    为了初始化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;@Overridepublic void create() {spriteBatch = new SpriteBatch();bf = new BitmapFont();}@Overridepublic 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();}@Overridepublic void dispose() {           spriteBatch.dispose();           bf.dispose();         }@Overridepublic void pause() {// TODO Auto-generated method stub}@Overridepublic void resize(int arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void resume() {// TODO Auto-generated method stub}}

     首先在create()函数中初始化一下相应的变量,否则会得到空指针。绘图用SpriteBatch,以及字体类BitmapFont,至于后者,我们很显然可以从名字就看出,它的实现是借助图片来实现字体显示的。

     绘图用SpriteBatch在绘图前一定要调用begin()方法,而在调用后一定要调用end()方法,否则程序会报错。

     一旦ApplicationListener开始运行,render函数就会不停执行。

   

     Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
     Gdx.gl.glClearColor(0f,0f,0f,0f);
     这两句是用来做清屏操作的,第一句是用来清除颜色缓存,并把刷新后的屏幕的颜色置为(0, 0, 0, 0) ,也就是黑色,如果(1,1,1,0)就是白色了。

      Gdx.graphics.getWidth()/2,这就是Gdx提供的一些类来获取系统信息。

      在dispose()函数中不要忘了对变量执行dispose()方法,在libgdx中,很多资源必须手动释放,否则一直占用着内存,很可能就此发生内存溢出的错误,而libgdx中有一个结构Disposable,一般实现了这个接口的类都需要手动回收的。

       

0 0
原创粉丝点击