The roCompositor allows the composition and animation of multiple roBitmaps and roRegions.

Supported Interfaces

Description

The roCompositor can create and manage roSprites in a z-ordered list. The sprites can be of arbitrary size and can be thought of as planes. The compositor can manage collision detection between the sprites, support scrolling the sprite bitmap source, and support animated sprites (multi-frame sprites with frame-flipping animation). You may have multiple roCompositor components, and they can composite onto the same or separate bitmaps. That said, the most common scenario is to have a single roCompositor

Example: Scrolling a bitmap
Library "v30/bslCore.brs"
Function main()
        black=&hFF'RGBA
        screen=CreateObject("roScreen")
        compositor=CreateObject("roCompositor")
        compositor.SetDrawTo(screen, black)
        http = CreateObject("roUrlTransfer")
        http.SetMessagePort(CreateObject("roMessagePort"))
        http.SetUrl("http://rokudev.roku.com/rokudev/examples/scroll/VeryBigPng.png")
        http.AsyncGetToFile("tmp:/VeryBigPng.png")
        wait(0, http.GetPort())
        bigbm=CreateObject("roBitmap","tmp:/VeryBigPng.png")
        region=CreateObject("roRegion", bigbm, 0, 0, 1280, 720)
        region.SetWrap(True)
        
        view_sprite=compositor.NewSprite(0, 0, region)
        compositor.draw() 
        screen.SwapBuffers()
        msgport = CreateObject("roMessagePort")
        screen.SetMessagePort(msgport) 
        codes = bslUniversalControlEventCodes()
        While True
                msg=wait(0, msgport) ' wait for a button
                print "Msg: "; type(msg); " event: "; msg.GetInt()
                If type(msg)="roUniversalControlEvent" Then
                        If msg.GetInt()=codes.BUTTON_UP_PRESSED Then
                                Zip(screen, view_sprite, compositor, 0,-4) 'up
                        Else If msg.GetInt()=codes.BUTTON_DOWN_PRESSED Then
                                Zip(screen, view_sprite, compositor, 0,+4) ' down
                        Else If msg.GetInt()=codes.BUTTON_RIGHT_PRESSED Then
                                Zip(screen, view_sprite, compositor, +4,0) ' right
                        Else If msg.GetInt()=codes.BUTTON_LEFT_PRESSED Then
                                Zip(screen, view_sprite, compositor, -4, 0) ' left
                        Else If msg.GetInt() = codes.BUTTON_BACK_PRESSED ' back button
                                Exit While
                        End If
                End If
        End While
End Function
Function Zip(screen, view_sprite, compositor, xd, yd)
        For x=1 To 60
                view_sprite.OffsetRegion(xd, yd, 0, 0) 
                compositor.draw()
                screen.SwapBuffers()
        End For
End Function