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.
无法消除硬切期间的闪烁
找到完整的背景
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.
我有一个简单的 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.
无法消除硬切期间的闪烁 找到完整的背景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.