getGameView
获取游戏渲染视图
getGameView 用于获取小游戏引擎的渲染容器(UIView)。该视图是小游戏画面输出的唯一载体,App 需将其添加到自身的视图层级中,用户才能看到游戏画面并进行触摸交互。
方法声明
objectivec
/**
* 获取小游戏渲染视图。
* @return 返回承载游戏画面的 UIView 实例。如果引擎未创建或已销毁,可能返回 nil。
*/
- (nullable UIView *)getGameView;参数说明
| 参数名 | 类型 | 必传 | 描述 |
|---|---|---|---|
| 无 | - | - | 该方法不接受参数。 |
运行行为
- 视图持有:该视图由引擎内部创建并持有。调用此方法仅返回该实例的引用。
- 生命周期绑定:该视图的生命周期与
gameHandle绑定。一旦执行destroy,该视图将被销毁,再次调用将返回nil。 - 渲染内容:视图内部封装了 Metal 或 OpenGL 的 Layer,负责展现游戏脚本输出的所有图形内容。
代码示例
通常在监听到 SUD_RT_GAME_STATE_WAITING 状态后,在主线程执行挂载操作:
objectivec
#pragma mark - SUDRTGameStateChangeListener
- (void)onStateChangedFrom:(int)fromState to:(int)toState {
if (toState == SUD_RT_GAME_STATE_WAITING) {
// 必须在主线程操作 UI
dispatch_async(dispatch_get_main_queue(), ^{
UIView *gameView = [self.gameHandle getGameView];
if (gameView) {
// 设置布局并添加到当前 ViewController 的 View 中
gameView.frame = self.view.bounds;
gameView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[self.view addSubview:gameView];
NSLog(@"游戏视图挂载成功");
}
});
}
}注意事项
- 线程安全:
getGameView本身虽然可以跨线程调用,但返回的UIView及其后续的addSubview:操作必须在主线程执行。 - 重复挂载:多次调用
getGameView返回的是同一个实例。在切换页面或全屏切换时,注意处理好视图的父子关系。 - 层级管理:如果 App 需要在游戏画面上覆盖原生 UI(如聊天气泡、关闭按钮),请确保这些原生组件位于
gameView的上层。 - 尺寸调整:如果容器视图的大小发生变化(如横竖屏切换),请同步更新
gameView的frame,以触发引擎内部的渲染分辨率自适应。