Skip to content

setGameDrawFrameListener

设置游戏帧渲染监听器

setGameDrawFrameListener 用于注册一个回调接口,每当游戏引擎完成一帧画面的渲染时,SDK 都会触发该监听器。这通常用于实现原生 UI 与游戏画面的同步、性能监控,或者在特定帧执行截图、滤镜等高频操作。


方法声明

objectivec
/**
 * 设置游戏帧渲染回调监听。
 * @param listener 遵循 SUDRTGameDrawFrameListener 协议的对象。
 */
- (void)setGameDrawFrameListener:(nullable id<SUDRTGameDrawFrameListener>)listener;

参数说明

参数名类型必传描述
listenerid<SUDRTGameDrawFrameListener>监听器实例。传入 nil 则取消监听。

运行行为

  1. 高频触发:回调频率取决于游戏的帧率(通常为 30fps 或 60fps)。
  2. 同步性:回调通常发生在渲染线程或主线程(取决于具体实现),它保证了回调触发时当前帧的渲染指令已提交。
  3. 非阻塞性:该监听器仅用于通知,不会阻塞游戏内部的渲染循环。

代码示例

通过监听帧回调,可以实现原生视图与游戏角色位置的完美同步:

objectivec
// 1. 实现协议
@interface GameViewController () <SUDRTGameDrawFrameListener>
@end

@implementation GameViewController

- (void)setupListener {
    // 2. 注册监听
    [self.gameHandle setGameDrawFrameListener:self];
}

#pragma mark - SUDRTGameDrawFrameListener
- (void)onGameDrawFrame {
    // 3. 每一帧渲染时都会执行此处逻辑
    // 例如:在此处同步更新覆盖在游戏上的原生进度条或特效
    /*
    dispatch_async(dispatch_get_main_queue(), ^{
        [self updateNativeOverlay];
    });
    */
}

@end

注意事项

  • 性能损耗:由于该回调触发极其频繁(每秒 60 次),严禁onGameDrawFrame 中执行耗时的 CPU 操作、同步网络请求或复杂的计算。
  • 线程安全:如果需要在回调中操作原生 UI 控件,必须通过 dispatch_async(dispatch_get_main_queue(), ...) 切换到主线程。
  • 按需开启:如果不需要每帧同步,请在任务完成后及时通过 setGameDrawFrameListener:nil 移除监听,以降低资源开销。
  • 状态依赖:只有在游戏处于 PLAYING 状态且画面发生变化时,该监听器才会持续触发。