Skip to content

startGame:didGameHandleCreated:completion:

启动游戏(通过 Game ID)

该方法通过游戏唯一标识符(Game ID)正式启动游戏。这是 SDK 最核心的接口之一,它负责创建游戏视图、初始化渲染画布、并最终将游戏画面呈现给用户。如果之前已经调用过 preStartpreLoad,该接口将实现瞬间启动。


方法声明

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;

参数说明

参数名类型必传描述
gameIDNSString *游戏的唯一标识符。
didGameHandleCreatedBlock游戏句柄(Handle)创建后的回调。开发者通常在此处通过 registerWrappedClientWithGameHandle: 注册代理。
completionBlock游戏完全启动完成后的回调。此时首屏已渲染,用户可以开始交互。

运行行为

  1. 链路复用:SDK 内部会检查是否存在该 gameID 的预加载或预启动实例。如果有,则直接复用;如果没有,则自动触发完整的下载-加载-启动链路。
  2. 句柄生成:在 didGameHandleCreated 回调中,SDK 会交付 gameHandle。该句柄是后续与游戏进行通信(如发送消息、控制状态)的唯一凭证。
  3. 视图呈现:该方法执行后,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: 以释放渲染资源。