You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Roku频道导航异常:切换至RendererScreen后页面空白

Roku频道导航逻辑修复方案

问题根源分析

你的代码存在三个核心问题,导致RendererScreen空白且导航失效:

  1. 重复创建roSGScreen:Roku应用仅允许存在一个主屏幕实例,Task中重新创建屏幕会与原有ActivationScreen的上下文冲突,导致新场景无法正确渲染。
  2. 错误的场景切换方式:直接设置currentScene字段不是官方推荐的导航方式,必须通过屏幕的sceneManager来管理场景切换。
  3. Task上下文缺失:调用Task时未传递原有屏幕的场景管理器引用,Task无法操作正确的上下文环境。

修正后的实现代码

1. 主应用入口(main.brs)

初始化全局主屏幕,注册所有需要的场景并设置初始激活页:

sub main()
    screen = createObject("roSGScreen")
    port = createObject("roMessagePort")
    screen.setMessagePort(port)

    ' 注册场景(替换为你的实际组件路径)
    screen.sceneManager.addScene("ActivationScreen", "pkg:/components/ActivationScreen.xml")
    screen.sceneManager.addScene("RendererScreen", "pkg:/components/RendererScreen.xml")

    ' 启动时加载激活页面
    screen.sceneManager.showScene("ActivationScreen")

    screen.show()

    while true
        msg = wait(0, port)
        if type(msg) = "roSGScreenEvent"
            if msg.isScreenClosed() then exit while
        end if
    end while
end sub

2. 导航Task修正

移除新建屏幕的逻辑,改为接收场景管理器引用并执行切换:

sub init()
    print "NAVIGATE: Task initialized."
    m.top.functionName = "navigateToScene"
end sub

sub navigateToScene(sceneManager as Object)
    ' 通过场景管理器切换到目标场景
    sceneManager.showScene("RendererScreen")
end sub

3. ActivationScreen中调用导航

在激活完成的事件处理中,获取全局场景管理器并调用Task:

' 示例:激活完成按钮的点击事件处理
sub onActivationSuccess()
    ' 获取当前场景所属的全局场景管理器
    sceneManager = m.top.getSceneManager()
    
    ' 创建并调用导航Task
    navigateTask = createObject("roSGNode", "NavigateTask")
    navigateTask.navigateToScene(sceneManager)
end sub

4. 确保RendererScreen组件正常

检查RendererScreen的XML是否包含可见UI元素(示例):

<component name="RendererScreen" extends="Scene">
    <children>
        <Label 
            text="Renderer Screen 加载成功!" 
            width="1920" 
            height="1080" 
            color="#FFFFFF" 
            font-size="48" 
            horizontalAlign="center" 
            verticalAlign="center"
        />
    </children>
</component>

关键注意事项

  • 所有场景必须在主屏幕的sceneManager中注册,否则无法被加载。
  • 避免在Task或场景中重复创建roSGScreen,否则会破坏应用上下文。
  • 场景切换优先使用sceneManager.showScene()方法,这是Roku官方推荐的标准导航方式。

内容的提问来源于stack exchange,提问作者Suleyman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 18:31:01