roImageCanvas图层未更新

时间:2013-12-24 07:59:49

标签: roku brightscript

我正在开发一个自定义窗口视频播放器。我想要的功能是当播放器缓冲视频时显示现在加载的图像(或代替)视频播放器,当播放器开始播放视频时删除正在加载的图像。

但问题是现在加载图像在屏幕上绘制,当播放器开始播放视频时它不会消失。

以下是我用来绘制画布的代码:

function draw_canvas()
m.canvas.AllowUpdates(false)
m.canvas.Clear()
m.canvas.SetLayer(0, m.canvasLayers.background)
if m.isLoadingVideo = true
    m.canvas.SetLayer(1, [m.canvasLayers.frameImage, m.canvasLayers.nowLoadingImage])
else if m.isLoadingVideo = false
    m.canvas.SetLayer(1, [m.canvasLayers.frameImage])
end if
m.canvas.AllowUpdates(true)
end function

以下是在事件循环中调用此draw_canvas函数的代码:

if type(msg) = "roVideoPlayerEvent"
    if msg.GetMessage() = "start of play"
        m.isLoadingVideo = false
        m.drawCanvas()
    else if msg.GetMessage() = "startup progress"
        if m.isLoadingVideo <> true
            m.isLoadingVideo = true
            m.drawCanvas()
        end if
    end if
end if

roVideoPlayer开始使用应用程序的开始,并且位于与现在加载图像相同的坐标处。

这是来自我的控制器功能的代码:

m.drawCanvas()
m.videoPlayer.Play()
return m.eventLoop()

我无法找到代码中的错误,所以如果有人可以帮我解决它,请

1 个答案:

答案 0 :(得分:2)

发现问题了!问题出现在我的背景图层中,我没有在后台图层中将CompositionMode设置为“Source”。这样做之后问题就消失了。

irInStoreScreen.canvasLayers.background = {
    Color: "#00000000",
    targetRect: {
        x: 0,
        y: 0,
        w: irInStoreScreen.screenRect.w,
        h: irInStoreScreen.screenRect.h
    },
    compositionMode: "Source"
}