Roku:摆脱组件海报图像闪烁

Roku: get rid of component poster image flicker

我有一个简单的 brightscript roku 应用程序。我只想在启动画面后播放全屏图像,但在我的全屏图像之前显示了一个奇怪的全屏黑色然后是灰色背景。

我可以使用 roImageCanvas 显示全屏图像,但我不想使用该 hack。我需要使用一个组件。

这是 quick video 显示我所看到的内容。

这是我的 main.brs:

sub Main()
' THIS does NOT cause flicker
'  background = {
'        Color: "#000000"
'    }
'    loadingImage = {
'        Url: "pkg:/images/main-background.png"
'        TargetRect: {
'            x: 0,
'            y: 0,
'            w: 1280,
'            h: 720
'        }
'    }
'    loadingText = {
'        Text: "Loading...",
'        TextAttrs: {
'            Font: "Large",
'            VAlign: "Top"
'        },
'        TargetRect: {
'            x: loadingImage.TargetRect.x,
'            y: loadingImage.TargetRect.y + 25,
'            w: loadingImage.TargetRect.w,
'            h: 30
'        }
'    }
'    canvas = CreateObject( "roImageCanvas" )
'    canvas.SetLayer( 0, [ background, loadingImage, loadingText ] )
'    canvas.Show()  

  showChannelSGScreen()

'  canvas.Hide()
end sub

sub showChannelSGScreen()
  screen = CreateObject("roSGScreen")
  m.port = CreateObject("roMessagePort")
  screen.setMessagePort(m.port)
  scene = screen.CreateScene("ZORenderablesExample")
  screen.show()

  while(true)
    msg = wait(0, m.port)
    msgType = type(msg)

    if msgType = "roSGScreenEvent"
      if msg.isScreenClosed() then return
    end if
  end while

end sub

我的组件:

<?xml version = "1.0" encoding = "utf-8" ?> 

<!--********** Copyright 2016 Roku Corp.  All Rights Reserved. **********-->

<component name = "ZORenderablesExample" extends = "Scene" >

  <script type = "text/brightscript" >

    <![CDATA[

    sub init() 
    end sub

    ]]>

  </script>

  <children>
        <Poster
            id="mainBackground"
            translation="[0, 0]"
            uri="pkg:/images/main-background.png"
            width="1280"
            height="720"
            visible="true">
            <Label 
                id = "loading" 
                translation = "[ 0, 244 ]" 
                width = "1280" 
                height = "720" 
                font = "font:SmallBoldSystemFont" 
                text = "Loading..." 
                horizAlign = "center" 
                vertAlign = "center"
                visible = "true" />            
        </Poster>

        <!-- Overhang logo -->
        <Poster
            translation="[79, 36]"
            uri="pkg:/images/header-logo.png"
            width="156"
            height="49"
            visible="true" />
  </children>
</component>

我制作了一个 github repo 在那里你可以得到我的完整代码

如何防止闪烁?有什么方法可以让启动画面一直显示到组件和全屏图像完成渲染?

FWIW 我正在使用最新的 roku 棒(4 核)

你在这里看到的灰色背景本身就是一个场景。它在加载海报时变得可见。要隐藏它,您可以添加黑色背景。尝试将其作为场景中的第一个 child。

<Rectangle
    width="1280"
    height="720"
    color="0x000000"/>

使用场景图XML.

无法消除硬切期间的闪烁

可以在 this Roku forum thread

找到完整的背景

Roku 需要更好的场景图解决方案,因为每个人都会遇到同样的问题。允许在渲染下方的场景之前保持飞溅是一种解决方案。

从 Roku OS v7.6 开始,他们引入了一个 Manifest 条目来解决这个问题: 在 Manifest 文件中创建一个条目,例如 "splash_rsg_optimization=1"。

This is to Remove flicker between the splash screen and initial screen during channel launch of SceneGraph channels.