Roku: избавьтесь от мерцания изображения постера компонента

У меня есть простое приложение brightscript roku. Я просто хочу воспроизвести полноэкранное изображение после экрана-заставки, и я получаю странный полноэкранный черный, а затем серый фон, который появляется перед моим полноэкранным изображением.

Я могу отображать полноэкранное изображение, используя roImageCanvas, но я не хочу использовать эту хитрость. Мне нужен компонент.

Вот быстрое видео показывая, что я вижу.

Вот мой 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, где вы можете получить мой полный код

Как предотвратить мерцание? Есть ли способ сохранить экран-заставку до тех пор, пока компонент и полноэкранное изображение не завершат рендеринг?

FWIW Я использую новейшую палку roku (4 ядра)


person rynop    schedule 15.11.2016    source источник


Ответы (3)


Начиная с версии Roku OS v7.6, они ввели запись в манифесте для решения этой проблемы: сделайте запись в файле манифеста, например, «splash_rsg_optimization = 1».

Это необходимо для устранения мерцания между заставкой и начальным экраном во время запуска каналов SceneGraph.

person Keshav Goel    schedule 03.07.2017

Невозможно избавиться от мерцания во время резкой резки при использовании XML графа сцены.

Полный текст можно найти в этой ветке форума Roku

Roku нужно лучшее решение для графа сцены, поскольку все сталкиваются с одной и той же проблемой. Одним из решений было бы позволить поддерживать всплеск до тех пор, пока не появится сцена под рендером.

person rynop    schedule 18.11.2016

Серый фон, который вы видите здесь, - это сама сцена. Он становится видимым во время загрузки плаката. Чтобы скрыть это, вы можете добавить черный фон. Попытайтесь поместить это как первого ребенка в свою сцену.

<Rectangle
    width="1280"
    height="720"
    color="0x000000"/>
person Eugene Smoliy    schedule 17.11.2016
comment
Спасибо, но это не избавляет от мерцания - просто заставляет жесткую резку мерцать черным, а не серым. - person rynop; 18.11.2016