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

时间:2016-11-15 17:50:10

标签: roku brightscript

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

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

这是显示我所看到的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核)

3 个答案:

答案 0 :(得分:2)

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

  

这是在SceneGraph频道的频道启动期间删除闪屏和初始屏幕之间的闪烁。

答案 1 :(得分:1)

使用场景图XML时,没有办法摆脱强硬期间的闪烁。

完整背景可在this Roku forum thread

找到

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

答案 2 :(得分:0)

您在此处看到的灰色背景是场景本身。当海报被加载时它变得可见。要隐藏它,您可以添加黑色背景。尝试将其作为场景中的第一个孩子。

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