本文链接: http://blog.csdn.net/xietansheng/article/details/50186747
1. ApplicationListener 接口
一个 LibGDX 应用有意义明确的生命周期方法,用于调节应用的各种状态。LibGDX 应用的生命周期事件方法定义在 ApplicationListener 接口中,开发人员通过在实现该接口类中处理生命周期事件方法的调用。ApplicationListener 接口的实现类,可以理解为一个游戏的实例,游戏最高级别的控制器,也是游戏主程序开始执行的入口类,在平台启动器中实例化实现该接口的实现类启动游戏。
实现该接口的类如下:
package com.libgdx.test;
import com.badlogic.gdx.ApplicationListener;
/**
* 游戏主程序的启动入口类
*/
public class MainGame implements ApplicationListener {
@Override
public void create() {
}
@Override
public void resize(int width, int height) {
}
@Override
public void render() {
}
@Override
public void pause() {
}
@Override
public void resume() {
}
@Override
public void dispose() {
}
}
2. ApplicationAdapter 抽象类
在游戏开发中如果只需要使用到生命周期方法中的几个方法,MainGame 可以继承 ApplicationAdapter 抽象类,ApplicationAdapter 空实现了 ApplicationListener 接口的所有方法。
3. 生命周期事件方法说明
- create(): 当应用被创建时调用一次。
- resize(int width, int height): 游戏屏幕尺寸改变并且不处于暂停状态将被调用,在 create() 方法之后也会被调用一次。
- render(): ApplicationListener 中的游戏循环渲染方法,每时每刻都在被调用。游戏逻辑的更新通常也是在这个方法中被执行。
- pause(): 当游戏界面被新的一个界面覆盖时(例如按下 Home 键回到主界面时被主界面覆盖,来电时被来电界面覆盖),该方法将被调用。通常在这里保存暂停时的游戏状态。
- resume(): 被其他界面覆盖后(pause 状态后),重新回到游戏界面时,该方法被调用。
- dispose(): 当应用被销毁时调用。
下图是官方给出的生命周期图解:
4. 生命周期方法测试
在实现 ApplicationListener 接口的 MainGame 类中,每个生命周期方法执行时进行 log 的打印:
package com.libgdx.test;
import com.badlogic.gdx.Application;
import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
public class MainGame extends ApplicationAdapter {
public static final String TAG = MainGame.class.getSimpleName();
private boolean isFirstRender = true;
@Override
public void create() {
// 首先设置 log 输出级别为 debug 级别
Gdx.app.setLogLevel(Application.LOG_DEBUG);
Gdx.app.debug(TAG, "create()");
}
@Override
public void resize(int width, int height) {
Gdx.app.debug(TAG, width + " * " + height);
}
@Override
public void render() {
// 因为 render() 是每时每刻都在循环被调用的, 所以这里设置一个标记, 只在第一次调用时输出 log
if (isFirstRender) {
Gdx.app.debug(TAG, "render()");
isFirstRender = false;
}
}
@Override
public void resume() {
Gdx.app.debug(TAG, "resume()");
}
@Override
public void pause() {
Gdx.app.debug(TAG, "pause()");
}
@Override
public void dispose() {
Gdx.app.debug(TAG, "dispose()");
}
}
创建平台启动器运行游戏。
Desktop 平台操作: 运行游戏 -> 关闭窗口。
控制台的 log 输出顺序如下:
// 运行游戏
MainGame: create()
MainGame: 320 * 480
MainGame: render()
// 关闭窗口
MainGame: pause()
MainGame: dispose()
Android 平台操作: 运行游戏 -> 按 Home 键回到主界面 -> 重新点击 APP 图标进入游戏 -> 按返回键退出游戏。
LogCat 输出:
// 运行游戏
MainGame: create()
MainGame: 320 * 480
MainGame: render()
// 按 Home 键回到主界面
MainGame: pause()
// 重新点击 APP 图标进入游戏
MainGame: resume()
// 按返回键退出游戏
MainGame: pause()
MainGame: dispose()