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: 
Highlighted
Level 7

fieldToInterp for a top level component

I am trying to extend the Poster component this way:

 

<?xml version="1.0" encoding="utf-8" ?>

<component name="PosterWithFadeIn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" extends="Poster" xsi:noNamespaceSchemaLocation="http://rokudev.roku.com/rokudev/schema/RokuSceneGraph.xsd">

  <children>
    <Animation
      id = "fadeIn"
      duration = "1"
      easeFunction = "linear" >

      <FloatFieldInterpolator
        key = "[ 0.0, 1.0 ]"
        keyValue = "[ 0.0, 1.0 ]"
        control="start"
        fieldToInterp = "????.opacity" />

    </Animation>
  </children>

</component>

The issue is that I have never seen any example that refers to the "main" component in an animation "fieldToInterp" attribute.

 

What shall I use? I tried "opacity", ".opacity", "m.top.opacity" and nothing works...

 

Thanks

0 Kudos
4 Replies
Highlighted
Level 10

Re: fieldToInterp for a top level component

<component name="PosterWithFadeIn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" extends="Poster" xsi:noNamespaceSchemaLocation="http://rokudev.roku.com/rokudev/schema/RokuSceneGraph.xsd">

  <children>

<Poster id="myPoster" loadheight="250" loadwidth="400" width="400" height="250" uri="" opacity="0.0" />
<Animation id = "fadeIn" duration = "1" easeFunction = "linear" > <FloatFieldInterpolator key = "[ 0.0, 1.0 ]" keyValue = "[ 0.0, 1.0 ]" fieldToInterp = "myPoster.opacity" /> </Animation> </children> </component>

 


...

the in brs:

m.poster = m.top.findnode("MyPoster")
m.animation = m.top.findnode("fadeIn")
m.poster.uri = < uri >

then during times when you want the animation and the poster to show use this:
m.animation.control = "stop"
m.animation.control = "start"

stop it always before you start it. you can only start a stopped task.

0 Kudos
Highlighted
Level 7

Re: fieldToInterp for a top level component

@speechlesUnfortunately this does not answer the question I am asking. The top component is already a Poster (<component ... extends="Poster"...>).

 

In Brightscript I can simply access the "opacity" of the component by writing "m.top.opacity" and I want to access this very field in the animation. Not create another poster inside a Poster component.

 

The solution you propose also has the issue that if you write <PosterWithFadeIn uri="xxxx"/> the attribute uri is applied to the main component, not the one you define inside (and that is true for every single attribute...). This is why I am extending from Poster...

 

The question is to access the opacity field of the main component (or any other field for that matter) via the fieldToInterp attribute in the animation.

 

0 Kudos
Highlighted
Level 10

Re: fieldToInterp for a top level component

<?xml version="1.0" encoding="utf-8" ?>

<component name="PosterWithFadeIn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" extends="Poster" xsi:noNamespaceSchemaLocation="http://rokudev.roku.com/rokudev/schema/RokuSceneGraph.xsd">

  <interface>
<field id="height" type="integer" value="0" alwaysNotify="true" onChange="OnChange" />
<field id="width" type="integer" value="0" alwaysNotify="true" onChange="OnChange" />
<field id="uri" type="integer" value="0" alwaysNotify="true" onChange="OnChange" />
<field id="opacity" type="float" value="1.0" alwaysNotify="true" onChange="OnChange" />
<field id="translation" type="array" value="[0, 0]" alwaysNotify="true" onChange="OnChange" />
</interface> <children> <Poster id="idPoster" /> <Animation id = "fadeIn" duration = "1" easeFunction = "linear" > <FloatFieldInterpolator key = "[ 0.0, 1.0 ]" keyValue = "[ 0.0, 1.0 ]" control="start" fieldToInterp = "idPoster.opacity" /> </Animation> </children> </component>

 

Then in the BRS:

 

Function OnChange()
    m.poster = m.top.findnode("idPoster")
    m.poster.height = m.top.height
    m.poster.width = m.top.width
    m.poster.opacity = m.top.opacity
    m.poster.uri = m.top.uri
m.poster.translation = m.top.translation End Function

 

0 Kudos
Highlighted
Level 7

Re: fieldToInterp for a top level component

@speechlesThank you for your answers. I understand what you are trying to achieve and I agree with you that what you propose will work.

 

But it is still not answering the question I am asking. The field of the top level component is accessible in Brightscript via "m.top.opacity".

 

My question is: how do I access it from the Animation / fieldToInterp attribute.

 

And maybe at the end of the day, the answer is that it is not possible. But this is the question I am asking. If it is not possible, then yes there are workarounds (like what you suggest, or implementing the interpolation via a timer which is what I did...), but I am interested to know if it is possible at all and if yes, how.

0 Kudos