libGDX游戏的生命周期

一,ApplicationListener和ApplicationAdapter

提及到libGDX的游戏生命周期,那么不得不提一个非常重要的接口ApplicationListener,这个接口位于com.badlogic.gdx包里,ApplicationListener的主要职责是创建和显示窗口。下图为ApplicationListener里的函数:

2015-07-20_235942

既然ApplicationListener是接口,那么就一定是需要去实现才能使用了,但是每次使用都要去实现这么多个方法,似乎有点吃力不讨好,而且好未必都用得上。看回之前创建的项目原来ApplicationListener已经有个实现的类ApplicationAdapter了:

2015-07-21_001133

二,生命周期图

看到了ApplicationListener里的这些函数,虽然都有一句话的解释,但是我觉得对照官方的生命周期图来看会更加清晰明了,以下是官方的生命周期图:

2015-07-21_000404

三,程序中看生命周期

为了清楚了解游戏的生命周期,下面我们使用log来打印下日志:

1,在core 中的主类中重写父类ApplicationAdapter的方法:

package com.stephen.game;

import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;

public class MyGdxGame extends ApplicationAdapter {
    SpriteBatch batch;
    Texture img;
    
    @Override
    public void create () {
        batch = new SpriteBatch();
        img = new Texture("badlogic.jpg");
    }
    @Override
    public void render () {
        Gdx.gl.glClearColor(1, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        batch.begin();
        batch.draw(img, 0, 0);
        batch.end();
    }
    @Override
    public void resize(int width, int height) {
        // TODO Auto-generated method stub
        super.resize(width, height);
    }
    @Override
    public void pause() {
        // TODO Auto-generated method stub
        super.pause();
    }
    @Override
    public void resume() {
        // TODO Auto-generated method stub
        super.resume();
    }
    @Override
    public void dispose() {
        // TODO Auto-generated method stub
        super.dispose();
    }
}

2,添加打印日志的语句:

package com.stephen.game;

import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;

public class MyGdxGame extends ApplicationAdapter {
    SpriteBatch batch;
    Texture img;
    private String tag = "TAG";
    private boolean isRender = false;
    
    @Override
    public void create () {
        Gdx.app.log(tag, "create");
        batch = new SpriteBatch();
        img = new Texture("badlogic.jpg");
    }
    @Override
    public void render () {
        if(!isRender){
            //此处由于render会不断执行,所以加上个标志
            Gdx.app.log(tag, "render");
            isRender = true;
        }
        
        Gdx.gl.glClearColor(1, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        batch.begin();
        batch.draw(img, 0, 0);
        batch.end();
    }
    @Override
    public void resize(int width, int height) {
        // TODO Auto-generated method stub
        super.resize(width, height);
        Gdx.app.log(tag, "resize");
    }
    @Override
    public void pause() {
        // TODO Auto-generated method stub
        super.pause();
        Gdx.app.log(tag, "pause");
    }
    @Override
    public void resume() {
        // TODO Auto-generated method stub
        super.resume();
        Gdx.app.log(tag, "resume");
    }
    @Override
    public void dispose() {
        // TODO Auto-generated method stub
        super.dispose();
        Gdx.app.log(tag, "dispose");
    }
}

3,运行程序,查看日志:

(1)游戏启动时:

2015-07-21_005253

(2)按Home键:

2015-07-21_005751

(3)按Home键后点击游戏图标:

2015-07-21_010013

(4)按返回键:

2015-07-21_005437

(5)再次回到游戏:

2015-07-21_005620

(6)从任务管理处直接关闭游戏:

2015-07-21_010246

四,总结

通过以上官方api的说明、官方的生命周期图和我们程序所打印的日志,可以总结如下:

create ():游戏首次创建时调用,在这个函数里可以初始化我们自己的一些信息。

resize():当create方法执行完毕后调用,另外当游戏处于活跃状态下屏幕尺寸改变时也会调用调用。

render ():这个函数在resize执行完毕后开始运行,而且是不断运行渲染游戏图像界面。

pause():游戏进入后台的时候调用,此时游戏处于非活跃状态,但是游戏还存在。

resume():游戏从非活跃状态到活跃状态时调用。

dispose():游戏被销毁时调用。

posted @ 2015-07-21 01:07  StephenCMZ  阅读(572)  评论(0编辑  收藏  举报