Skip to content

getGameState

获取当前游戏状态

getGameState 用于实时查询小游戏引擎当前所处的生命周期阶段。通过该方法返回的枚举值,宿主 App 可以判断游戏是处于初始化完成、正在运行还是正在播放状态,从而决定是否可以执行 startplaypause 等指令。


方法声明

objectivec
/**
 * 获取当前游戏运行状态。
 * @return 返回 SUDRTGameState 枚举值。
 */
- (NSInteger)getGameState;

参数说明

参数名类型必传描述
--该方法不接受参数。

返回值说明(SUDRTGameState)

枚举值常量名描述
0SUD_RT_GAME_STATE_UNAVAILABLE不可用:引擎未创建或已销毁,需先调用 create
1SUD_RT_GAME_STATE_WAITING等待中:环境已就绪,此时可以挂载 View 或准备调用 start
2SUD_RT_GAME_STATE_RUNNING运行中:脚本已启动并在后台执行,但用户可能无法交互。
3SUD_RT_GAME_STATE_PLAYING播放中:游戏逻辑与渲染完全开启,用户可正常操作。

运行行为

  1. 即时同步:该方法为同步调用,立即返回引擎内部状态机的当前数值。
  2. 状态保护:在执行关键指令(如 start)前,内部通常会先调用 getGameState 检查是否处于合法的起始状态。
  3. 被动触发:除了主动查询外,建议配合 setGameStateListener: 监听状态的自动流转。

代码示例

objectivec
// 在执行特定逻辑前检查状态
SUDRTGameState currentState = [self.gameHandle getGameState];

if (currentState == SUD_RT_GAME_STATE_PLAYING) {
    // 游戏正在玩,可以弹出 App 原生的设置菜单并暂停游戏
    [self.gameHandle pause];
} else if (currentState == SUD_RT_GAME_STATE_WAITING) {
    // 环境好了但还没跑脚本,触发启动
    [self.gameHandle start:@"{}"];
}

注意事项

  • 状态依赖:不要在 UNAVAILABLE 状态下尝试调用 getGameViewrunScript,这些操作会因为环境未就绪而失效。
  • 多线程考量:虽然可以在任何线程查询,但建议在涉及 UI 切换的逻辑中,以主线程获取到的状态为准。
  • 监听器优先:对于复杂的业务逻辑,优先使用 setGameStateListener: 异步监听状态变更,而不是通过定时器不断轮询 getGameState