Skip to content

getGameState

获取游戏当前状态

getGameState 用于查询小游戏当前所处的生命周期阶段。由于小游戏的启动、运行和停止是一个异步过程,通过此方法可以实时获取引擎内部的状态机位置,从而决定是否可以执行特定操作(如:只有在 RUNNING 状态下才能调用 play())。


方法声明

java
/**
 * 获取游戏当前的状态
 *
 * @return 整数值,对应接口中定义的 GAME_STATE_* 常量
 */
int getGameState();

状态常量说明

常量名称描述
GAME_STATE_UNAVAILABLE0不可用:运行环境尚未创建,或已被 destroy() 销毁。此时无法进行任何游戏操作。
GAME_STATE_WAITING1等待中:环境已通过 create() 初始化,但脚本引擎尚未启动,或已被 stop() 停止。
GAME_STATE_RUNNING2运行中:脚本引擎已启动(通过 start()),游戏逻辑正在后台执行,但暂不处理用户输入。
GAME_STATE_PLAYING3游戏中:游戏处于前台激活状态(通过 play()),正在接收并处理触摸、传感器等玩家输入。

运行行为

  1. 即时性:该方法返回的是调用瞬间引擎的真实状态,而非 App 逻辑层的预期状态。
  2. 驱动 UI:通常配合 setGameStateListener 使用。getGameState 用于主动查询(如点击按钮时判断),而监听器用于被动接收状态变更通知。

代码示例

java
// 示例:在点击“开始游戏”按钮时的逻辑判断
int currentState = gameHandle.getGameState();

switch (currentState) {
    case SUDRTGameHandle.GAME_STATE_WAITING:
        // 状态正确,启动脚本
        gameHandle.start("{}");
        break;
    case SUDRTGameHandle.GAME_STATE_RUNNING:
        // 脚本已在运行,直接进入输入态
        gameHandle.play();
        break;
    case SUDRTGameHandle.GAME_STATE_UNAVAILABLE:
        Log.e("SUDOP", "游戏环境未准备好,请先执行 create()");
        break;
    default:
        Log.d("SUDOP", "当前状态:" + currentState);
        break;
}

注意事项

  • 非法操作拦截:在 UNAVAILABLE 状态下调用 start()play() 通常会触发错误回调或无效操作,因此在执行关键生命周期指令前进行状态检查是良好的编程习惯。
  • 状态切换耗时:从 WAITING 切换到 RUNNING 涉及到 JS 引擎的启动,可能存在微小的延迟,建议通过监听器捕获最终的成功切换。