startGame:didGameHandleCreated:completion:
启动游戏(通过 Game ID)
该方法通过游戏唯一标识符(Game ID)正式启动游戏。这是 SDK 最核心的接口之一,它负责创建游戏视图、初始化渲染画布、并最终将游戏画面呈现给用户。如果之前已经调用过 preStart 或 preLoad,该接口将实现瞬间启动。
方法声明
objectivec
/**
Start the game with a game ID.
@param gameID The unique identifier of the game.
@param didGameHandleCreated Called when the game handle is created but before full initialization.
@param completion Called when the game has finished loading and is ready for display.
@return An instance of id<SUDOPGameTask> to track the start process.
*/
+ (id<SUDOPGameTask>)startGame:(NSString *)gameID
didGameHandleCreated:(nullable SUDOPDidGameHandleCreated)didGameHandleCreated
completion:(nullable SUDOPGameOperationCompletion)completion;参数说明
| 参数名 | 类型 | 必传 | 描述 |
|---|---|---|---|
| gameID | NSString * | 是 | 游戏的唯一标识符。 |
| didGameHandleCreated | Block | 否 | 游戏句柄(Handle)创建后的回调。开发者通常在此处通过 registerWrappedClientWithGameHandle: 注册代理。 |
| completion | Block | 否 | 游戏完全启动完成后的回调。此时首屏已渲染,用户可以开始交互。 |
运行行为
- 链路复用:SDK 内部会检查是否存在该
gameID的预加载或预启动实例。如果有,则直接复用;如果没有,则自动触发完整的下载-加载-启动链路。 - 句柄生成:在
didGameHandleCreated回调中,SDK 会交付gameHandle。该句柄是后续与游戏进行通信(如发送消息、控制状态)的唯一凭证。 - 视图呈现:该方法执行后,SDK 会准备好渲染层。开发者通常需要通过
gameHandle获取游戏的 View 并添加至自己的 UI 视图层级中。
代码示例
objectivec
[SUDOP startGameWithGameID:@"game_999"
didGameHandleCreated:^(id<SUDRTGameHandle> gameHandle) {
// 1. 立即注册业务代理
[SUDOP registerWrappedClientWithGameHandle:gameHandle clientDelegate:self];
// 2. 将游戏视图添加到当前页面
UIView *gameView = [gameHandle getGameView];
gameView.frame = self.view.bounds;
[self.view addSubview:gameView];
NSLog(@"游戏句柄已创建");
}
completion:^(id<SUDOPGameHandleProvider> _Nullable provider, NSError * _Nullable error) {
if (!error) {
NSLog(@"游戏已完全加载并进入运行状态");
} else {
NSLog(@"启动失败: %@", error);
}
}];注意事项
- 重复调用:如果同一个
gameID的游戏已经在运行中,再次调用此方法可能会重新加载游戏或返回错误,具体行为取决于 SDK 的SingleTask配置。 - UI 线程:由于涉及
UIView的创建和操作,必须在主线程调用此方法。 - 清理逻辑:在退出游戏页面时,务必调用
stopGameWithHandle:以释放渲染资源。