Roku Developer Program

Developers and content creators—a complete solution for growing an audience directly.
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
_creare_
Level 8

While true loop keeps crashing roku

Jump to solution

 

 

 

When I run the below code my roku has a black screen and eventually crashes.
I think the issue is the while true loop but I haven't figured out how to have a wait or sleep

I found sleep() but it did not do anything to stop the crash
Neither did a thing with wait(0,port) (I may have implemented it wrong)

 

 

Here are all my files, their names and locations are designated by "FILE pkg:/*****/****.***"

File pkg:/components/Pong.brs

 
    Function init() 'Function is run when XML is parsed
        m.top.backgroundColor = "0xabc123FF" 'Set background color to black
        m.top.backgroundURI = "" 'Set background URI (image) to empty so background color displays
        
        m.Ball = m.top.findNode("ball"'Sets pointer to TopLabel node to adjust fields
        m.Ball.blendColor="0xFFFFFFFF"

        ballXPos = CreateObject("roFloat")
        ballXPos = 0
        bounceDirection = CreateObject("roInt")
        bounceDirection = 0

        while true
            if ballXPos > 1920
                bounceDirection = 1
            end if

            if ballXPos < 0
                bounceDirection = 0
            end if

            if bounceDirection = 0
                ballXPos = ballXPos + 50
            else
                ballXPos = ballXPos - 50
            end if
            m.Ball.translation = [ballXPos50]
        end while
        
    end Function
 
File pkg:/components/Pong.brs
 
<?xml version="1.0" encoding="UTF-8"?>
<component name="Pong" extends="Scene" >

<script type="text/brightscript" uri = "pkg:/components/Pong.brs"/>

    <children>
        <Label id="testLabel" 
            text="SCREENSAVER!"
            width="1920" 
            height="1080" 
            horizAlign="center"
            vertAlign="center"
            font="font:LargeBoldSystemFont"
        />
    <Poster
        id="ball"
        uri="pkg:/images/blackcircle.png"
        width="400"
        height="400"
        translation="[0,0]"
    />
    
    </children>
</component>
 
FILE pkg:/source/main.brs
 
sub Main()
    
    screen = createObject("roSGScreen"'Creates screen to display screensaver
    port = createObject("roMessagePort"'Port to listen to events on screen
    screen.setMessagePort(port)

    scene = screen.createScene("Pong"'Creates scene to display on screen. Scene name (AnimatedScreensaver) must match ID of XML Scene Component
    screen.show()

    while(true'Uses message port to listen if channel is closed
        msg = wait(0port)
        if (msg <> invalid)
            msgType = type(msg)
            if msgType = "roSGScreenEvent"
                if msg.isScreenClosed() then return
            end if
        end if
    end while
end sub
0 Kudos
1 Solution

Accepted Solutions
sanity-check
Level 9

Re: While true loop keeps crashing roku

Jump to solution

Yeah, you can't do stuff like that on the UI thread - i.e. not in any visual component.

https://developer.roku.com/en-gb/docs/developer-program/core-concepts/threads.md

You could create a 'Task' node which updates its ballXPos field on an interval, and have the UI code watch that field and update the x position when it changes.

Or if you don't want to bother with tasks, you can use a Timer node set to repeat and run your game loop code in that:

https://developer.roku.com/en-gb/docs/references/scenegraph/control-nodes/timer.md

View solution in original post

2 REPLIES 2\
sanity-check
Level 9

Re: While true loop keeps crashing roku

Jump to solution

Yeah, you can't do stuff like that on the UI thread - i.e. not in any visual component.

https://developer.roku.com/en-gb/docs/developer-program/core-concepts/threads.md

You could create a 'Task' node which updates its ballXPos field on an interval, and have the UI code watch that field and update the x position when it changes.

Or if you don't want to bother with tasks, you can use a Timer node set to repeat and run your game loop code in that:

https://developer.roku.com/en-gb/docs/references/scenegraph/control-nodes/timer.md

_creare_
Level 8

Re: While true loop keeps crashing roku

Jump to solution

Thank you! This works really well!

A few things about their example for others who might find this thread :
Make sure to change the "extends" thing from "Group" to "Scene"
And you can also set the timer to really low values like 0.01

0 Kudos