博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
libGDX游戏的生命周期
阅读量:6688 次
发布时间:2019-06-25

本文共 3536 字,大约阅读时间需要 11 分钟。

一,ApplicationListener和ApplicationAdapter

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

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

二,生命周期图

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

三,程序中看生命周期

为了清楚了解游戏的生命周期,下面我们使用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)游戏启动时:

(2)按Home键:

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

(4)按返回键:

(5)再次回到游戏:

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

四,总结

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

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

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

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

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

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

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

转载于:https://www.cnblogs.com/stephencmz/p/4663226.html

你可能感兴趣的文章
使用MediaElement.js构建个性的HTML5音频和视频播放器
查看>>
阿里云域名配置与解析
查看>>
常用的.net开源项目
查看>>
until 循环:实现一个shell脚本,不停地询问用户要执行什么操作,直到用户输入quit才会退出...
查看>>
thinkphp中无法加载数据库驱动
查看>>
MyBatis的xml文件增量热加载,支持多数据源
查看>>
wine安装的软件如何卸载
查看>>
C语言中基本的数据类型 和常用表达式
查看>>
More Fileds的直接输出和获取自定义字段的方法
查看>>
12.1LNMP架构介绍12.2MySQL安装12.312.4 PHP安装12.5Nginx安装
查看>>
ubuntu下安装ROR
查看>>
static 关键字
查看>>
linux系统下zookeeper设置开机启动失败,求指教
查看>>
sed的用法
查看>>
工作流调度
查看>>
Nginx TCP代理和负载均衡
查看>>
理解原型对象
查看>>
Apache虚拟目录
查看>>
容器是实现操作系统虚拟化的一种途径
查看>>
电脑内部声音怎么录制 Mac在线录制音频
查看>>