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)。 |
运行行为
- 资源分配:Runtime 会为该实例分配独立的 JavaScript 虚拟机(JS VM)和渲染画布。
- 环境校验:检查
options中提供的路径和参数是否合法,基础库是否完整。 - 异步实例化:由于涉及底层引擎的初始化,该过程是异步的,不会阻塞主线程。
- 句柄交付:初始化完成后,通过
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 必须妥善持有它。当不需要游戏时,务必调用handle的destroy方法,否则会导致严重的内存泄漏。 - 线程安全:回调闭包通常在 SDK 的内部工作线程执行。如果你需要在此回调中更新 UI(如显示游戏画面),务必手动切换回主线程:
dispatch_async(dispatch_get_main_queue(), ^{ ... });。