getGameState
获取游戏当前状态
getGameState 用于查询小游戏当前所处的生命周期阶段。由于小游戏的启动、运行和停止是一个异步过程,通过此方法可以实时获取引擎内部的状态机位置,从而决定是否可以执行特定操作(如:只有在 RUNNING 状态下才能调用 play())。
方法声明
java
/**
* 获取游戏当前的状态
*
* @return 整数值,对应接口中定义的 GAME_STATE_* 常量
*/
int getGameState();状态常量说明
| 常量名称 | 值 | 描述 |
|---|---|---|
| GAME_STATE_UNAVAILABLE | 0 | 不可用:运行环境尚未创建,或已被 destroy() 销毁。此时无法进行任何游戏操作。 |
| GAME_STATE_WAITING | 1 | 等待中:环境已通过 create() 初始化,但脚本引擎尚未启动,或已被 stop() 停止。 |
| GAME_STATE_RUNNING | 2 | 运行中:脚本引擎已启动(通过 start()),游戏逻辑正在后台执行,但暂不处理用户输入。 |
| GAME_STATE_PLAYING | 3 | 游戏中:游戏处于前台激活状态(通过 play()),正在接收并处理触摸、传感器等玩家输入。 |
运行行为
- 即时性:该方法返回的是调用瞬间引擎的真实状态,而非 App 逻辑层的预期状态。
- 驱动 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 引擎的启动,可能存在微小的延迟,建议通过监听器捕获最终的成功切换。