libGDX游戏的生命周期
一,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():游戏被销毁时调用。