Skip to content

getGameView

获取游戏渲染视图

getGameView 用于获取小游戏引擎的渲染容器(UIView)。该视图是小游戏画面输出的唯一载体,App 需将其添加到自身的视图层级中,用户才能看到游戏画面并进行触摸交互。


方法声明

objectivec
/**
 * 获取小游戏渲染视图。
 * @return 返回承载游戏画面的 UIView 实例。如果引擎未创建或已销毁,可能返回 nil。
 */
- (nullable UIView *)getGameView;

参数说明

参数名类型必传描述
--该方法不接受参数。

运行行为

  1. 视图持有:该视图由引擎内部创建并持有。调用此方法仅返回该实例的引用。
  2. 生命周期绑定:该视图的生命周期与 gameHandle 绑定。一旦执行 destroy,该视图将被销毁,再次调用将返回 nil
  3. 渲染内容:视图内部封装了 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 的上层。
  • 尺寸调整:如果容器视图的大小发生变化(如横竖屏切换),请同步更新 gameViewframe,以触发引擎内部的渲染分辨率自适应。