Skip to content

createGameHandleWithOptions:completion:

创建游戏句柄

createGameHandleWithOptions:completion:SUDRT 协议中最关键的实例方法。它扮演着“游戏工厂”的角色,负责根据你提供的配置参数,初始化一个独立的、具备完整运行环境的 Game Handle。只有成功获得这个句柄,你才能进一步控制游戏的生命周期(如启动、停止、监听事件)。


方法声明

objectivec
/**
 * 初始化并创建一个新的游戏句柄。
 * @param options 包含句柄创建参数的字典(如渲染模式、基础库路径等)。
 * @param completion 异步回调。成功时返回 handle,失败时返回 error。
 */
- (void)createGameHandleWithOptions:(NSDictionary *)options
                         completion:(nullable void (^)(id<SUDRTGameHandle> _Nullable handle,
                                                       NSError * _Nullable error))completion;

参数说明

options 字典决定了游戏实例的底层表现,常用配置如下:

键名 (Key)类型描述
"renderMode"NSNumber渲染模式:0 为自动,1 为原生 Surface 渲染,2 为 WebView 兼容渲染。
"baseLibPath"NSString基础库路径:指定小游戏运行所需的运行时基础 JS 库路径。
"appId"NSString小游戏 ID:用于标识当前实例所属的业务应用。
"maxMemory"NSNumber(可选)限制该实例可占用的最大内存(MB)。

运行行为

  1. 资源分配:Runtime 会为该实例分配独立的 JavaScript 虚拟机(JS VM)和渲染画布。
  2. 环境校验:检查 options 中提供的路径和参数是否合法,基础库是否完整。
  3. 异步实例化:由于涉及底层引擎的初始化,该过程是异步的,不会阻塞主线程。
  4. 句柄交付:初始化完成后,通过 completion 闭包交付 id<SUDRTGameHandle> 实例。

代码示例

objectivec
// 1. 准备创建参数
NSDictionary *createOpts = @{
    @"appId": @"wx_test_game_001",
    @"renderMode": @(1), // 强制开启原生加速渲染
    @"baseLibPath": [[NSBundle mainBundle] pathForResource:@"sud_base_lib" ofType:@"js"]
};

// 2. 发起创建请求
[self.sdkInstance createGameHandleWithOptions:createOpts
                                   completion:^(id<SUDRTGameHandle> _Nullable handle, NSError * _Nullable error) {
    if (error) {
        NSLog(@"[SUD] 创建句柄失败: %@", error.localizedDescription);
        return;
    }
    
    // 3. 持有该句柄,后续所有游戏操作都通过它完成
    self.currentGameHandle = handle;
    NSLog(@"[SUD] 游戏句柄创建成功,准备加载资源包...");
}];

注意事项

  • 多实例支持:理论上支持同时创建多个句柄,但受限于手机性能和内存,通常建议同一时间只运行一个活跃的游戏句柄。
  • 内存释放:一旦 completion 回调返回了 handle,App 必须妥善持有它。当不需要游戏时,务必调用 handledestroy 方法,否则会导致严重的内存泄漏。
  • 线程安全:回调闭包通常在 SDK 的内部工作线程执行。如果你需要在此回调中更新 UI(如显示游戏画面),务必手动切换回主线程:dispatch_async(dispatch_get_main_queue(), ^{ ... });