LibGDX_2.3: 游戏的生命周期(ApplicationListener)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xietansheng/article/details/50186747

本文链接: http://blog.csdn.net/xietansheng/article/details/50186747

LibGDX 基础教程(总目录)

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(): 当应用被销毁时调用。

下图是官方给出的生命周期图解:

life-cycle.png

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()

没有更多推荐了,返回首页