Skip to main content
Participant
January 24, 2020
Question

Can I show and Hide objects based on current frame number

  • January 24, 2020
  • 4 replies
  • 376 views

Hi is it possible to show or hide objects in captivating based on the current frame number through advanced actions? For example, I want to create an advance action that shows an object on stage when the play head reaches frame number 490,

This topic has been closed for replies.

4 replies

TLCMediaDesign
Inspiring
January 27, 2020

You can execute this JavaScript in an Advanced Action or onEnter of the slide:

 

window.cpAPIEventEmitter.addEventListener("CPAPI_VARIABLEVALUECHANGED",function(){

if ( window.cpInfoCurrentFrame === 490 )
{
cp.show("Element Name");
cp.hide("Element Name");
}

},"cpInfoCurrentFrame");

 

Just change the "Element Name" to the names of the elements you want to show or hide.

 

Note that the cpInfoCurrentFrame is a running count throughout the project. You can add code to have it reset a count on each slide so you don't have to figure out the actual frame count, on slide 20 for example.

Stagprime2687219
Legend
January 27, 2020

I will agree with the others that a little more context could help provide a more elegant solution.

Seems there is always many ways to accomplish the same goal.

The first one that popped into my head from a JavaScript standpoint would be to have an interval run onEnter to check the current frame and if it is equal to 490 show the object. In the example below I have a box on the stage named box that is hidden by default and extended on the timeline to accommodate 490 frames.

 

var showBox = setInterval(box490, 10);

function box490() {
if (cpInfoCurrentFrame==490) {
cp.show("box");
clearInterval(showBox);
}
}

 

Lilybiri
Legend
January 25, 2020

There may be a good reason to want this approach, but you didn't explain it.

Some ideas; use the Delay Command in an advanced action tirggered by the On Enter event of the slide. 

Or use JavaScritp where it is possible to create events for each frame.

Paul Wilson CTDP
Community Expert
Community Expert
January 25, 2020

Perhaps explaining why you would want to do it this way might help use suggest a solution to your problem. Personally, if I wanted an object to appear on the stage at a very precise time I would simply place it on the timeline at that precise time. Far easier to do than writing advanced action (I could think about it for a while but I'm not certain how to have a frame number trigger an action in advanced actions).

Paul Wilson, CTDP