getGameState
获取当前游戏状态
getGameState 用于实时查询小游戏引擎当前所处的生命周期阶段。通过该方法返回的枚举值,宿主 App 可以判断游戏是处于初始化完成、正在运行还是正在播放状态,从而决定是否可以执行 start、play 或 pause 等指令。
方法声明
objectivec
/**
* 获取当前游戏运行状态。
* @return 返回 SUDRTGameState 枚举值。
*/
- (NSInteger)getGameState;参数说明
| 参数名 | 类型 | 必传 | 描述 |
|---|---|---|---|
| 无 | - | - | 该方法不接受参数。 |
返回值说明(SUDRTGameState)
| 枚举值 | 常量名 | 描述 |
|---|---|---|
| 0 | SUD_RT_GAME_STATE_UNAVAILABLE | 不可用:引擎未创建或已销毁,需先调用 create。 |
| 1 | SUD_RT_GAME_STATE_WAITING | 等待中:环境已就绪,此时可以挂载 View 或准备调用 start。 |
| 2 | SUD_RT_GAME_STATE_RUNNING | 运行中:脚本已启动并在后台执行,但用户可能无法交互。 |
| 3 | SUD_RT_GAME_STATE_PLAYING | 播放中:游戏逻辑与渲染完全开启,用户可正常操作。 |
运行行为
- 即时同步:该方法为同步调用,立即返回引擎内部状态机的当前数值。
- 状态保护:在执行关键指令(如
start)前,内部通常会先调用getGameState检查是否处于合法的起始状态。 - 被动触发:除了主动查询外,建议配合
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状态下尝试调用getGameView或runScript,这些操作会因为环境未就绪而失效。 - 多线程考量:虽然可以在任何线程查询,但建议在涉及 UI 切换的逻辑中,以主线程获取到的状态为准。
- 监听器优先:对于复杂的业务逻辑,优先使用
setGameStateListener:异步监听状态变更,而不是通过定时器不断轮询getGameState。