I am having a problem with the pause slide action in Captivate. At the end of each slide, I want the playbar to pause and not automatically forward to the next slide.
Here's what I did to set it up:
In Captivate versions 3 - 5, that would pause at the final frame of a slide before loading the next slide. In Version 6, it will forward to the next slide, then pause on the first frame.
var currFrame = document.getElementById('Captivate').cpEIGetValue('rdinfoCurrentFrame ');
document.getElementById('Captivate').cpEISetValue('rdcmndGotoFrame', currFrame - 2);
Since the advanced action doesn't seem to occur until the first frame of the next slide, this script 'rewinds' the course to the last frame of the previous slide. It's a total hack.
Have you witnessed this too?
I am using the demo version of C6, and have found this behavior in the 64-bit version on win 7 and 32-bit version on win xp
Just checked it and you are correct. But why do you need such a complicated solution? I am called an "advanced actions freak", but to pause a slide at the end of its timeline, I would insert a click box somewhere and be sure its timeline extend to the end of the slide. Since a click box does pause the slide at the end of its timeline, slide will pause then. If you do not want the user to click by accident on the click box, make it pretty small and put it in a place where such a click is very improbable.
You have seen that the rd variables have been replaced by cp equivalents. In the JS you still use the old names, they are still available in the JS API (Jim Leichliter told me) but wouldn't it be safe to use the new names because they will certainly disappear some time? In case you want to stay with that solution (I'm a KISS fan as well).
Thanks for your response! The reason that I want to use the onexit action is that I can control the behavior globally, and it's faster than inserting a button on every slide and dragging it to the end of the timeline. Also - to me it doesn't make sense to add an extra button to the slide when there is a built in method to do this automatically - onExit. Learners who are using a screen reader may also be confused by the extra button. My 2 cents, but thank you for providing an alternative fix - that would certainly work.
I submitted this as a bug since it worked differently in the previous 3 versions.
cpInfoCurrentFrame --> rdinfoCurrentFrame
cpCmndGotoFrame --> rdcmndGotoFrame
..kinda wierd I know. I'm pretty usre that this is a bug, so once it's fixed I'll remove my hack. Thanks again.
A click box is not a button, and if you insert one properly timed on one slide, it is a breeze to copy it and paste it to all slides. You had to attach the advanced action also to each On Exit event. I wouldn't call your observation a bug, it is just a change: the On Exit event is always very dangerous to use, I mostly recommend never to use it because in case you have another interactive object with navigation attached to it, this even will never occur.
I didn't check the JS variables, just learned recently from Jim that the old ones are still there in the JS API. But logically, since the new ones are there as well, they should be available to use IMO.
Dually-noted that a click-box is not a button.
The onExit action seems to behave the same as I would expect the onEnter action to function to work - on the next slide. It's behaving differently from the previous 3 versions of Captivate I've used. Might be a bug. I submitted a bug report, so hopefully one of Adobe's experts will take a look.
var currFrame = document.getElementById('Captivate').cpEIGetValue('cpInfoCurrentFrame');
document.getElementById('Captivate').cpEISetValue('cpCmndGotoFrame', currFrame - 2);
The currentframe variable was 'undefined' at runtime. I could not skip to another frame by using the cpCmdGotoFrame variable. Again, I had to use the following code with the 'old' variables to get it to work:
var currFrame = document.getElementById('Captivate').cpEIGetValue('rdinfoCurrentFrame');
document.getElementById('Captivate').cpEISetValue('rdcmndGotoFrame', currFrame - 2);
Maybe there is a different method than cpEIGetValue/cpEISetValue to access the new variables? That would explain things..
We can set following advance action to get this behavior:
Assumptions: Slide is 30frames/sec and display time of each slide is 3sec
Expression : cpCmndpause = 1+0
Expression : cpCmndGotoFrame= 89+0
This is applicable for the first slide , for the next slide we need to add "90*(slidenumber-1)" and replace 0 from the second equation. Example I want to set it for second slide then I will update the expression as
Expression : cpCmndGotoFrame= 89+90
Hope this might give easy solution to the problem.
Forgive me, but I don't think your "easy" solution would be very practical for e-learning developers that need to make a living out of developing courses for clients.
Unless I'm misunderstanding your solution, you seem to be suggesting something that would need to be updated slide by slide in the Advanced Actions code each time the e-learning developer made any changes to the duration of even one slide in the entire movie.
Is that correct?
I totally agree with Rod here. Why make things so complicated when a simple click box can solve what you want?
Avinash, this is really not a nice solution, sorry for my remark. You will expect the developer to calculate that number for each slide? If we had a system variable that shows the duration or the number of frames in the current slide it could be changed so that the same action could be used for each slide, but we have not. But this seems more like an expression whe use often here to point to administratives: 'Why make it easy when you do it in a complicated way?'
Maybe this article about changes in CP6 by Jim Leichliter could shed some light:
Rod & Lilybiri thanks for your honest opinion , I totally agree that solution which I provided was not efficient for advance use, hmm.. also clickbox is a easy work around no doubt in that, well I tried with different expression and it worked for all the combinations.
Now I changed the second expression as :
Expression : cpCmndpause = 1+0
Expression : cpCmndGotoFrame= cpInfoCurrentFrame -1
and there is no need to update this expression , author may use this expression on slide exit for every slide.
PLease let me know your opinion on this .
Want to repeat my warning that On Exit event is not sure at all to be executed, if the playhead doesn't reach the last frame which can be caused by another ineractive object that navigates directly to some slide.
Hey there ,
First I am newbie to this forum .. I'd like to thank you guys 'cause you all make so much effort to resolve our issues.
I also faced similar issue, read all the post above could understand wich option should I adopt ? I am not a script person neither my students so want to stay away from it, I liked the clickbox idea but not sure if I want to put an extra object on my slides. Finally tried expression options described above, it worked somehow but scared of Lilybiri's warning. Lilybiri can you describe more in detail when OnExit event will not fire ( with an example if possible) because if some object is navigating me to some slide I dont want on exit action to pause me . Can you make me understand this ?
Rest my students are liking captivate, and I am impressed by new Themes and software simulation...they are cool !!
In this screenshot you see a button with the default settings: duratoin 3secs, pause at 1.5secs. The success action for that button is also the default one 'Go to Next Slide'.
When this slide is playing, the playhead will start at the first frame, move on and stop at frame 45, because of that pause (default frame rate = 30fpx, so 1.5secs = 45 frames). When the user clicks on the button, the action 'On Success' of that button is executed, the playhead moves immediately to the next slide, which starts at frame 91. The frames between 45 and 91 will never be visited, and the On Exit action of the slide will not be executed because the last frame (90) of that slide will never be reached.
var currFrame = document.getElementById('Captivate').cpEIGetValue('m_VarHandle.cpInfo CurrentFrame');
document.getElementById('Captivate').cpEISetValue('m_VarHandle.cpCmndG otoFrame', currFrame - 2);
Still doesn't seem to work. Interestingly, Jim's article lists all of the properties withtin the m_varhandle object, and the 'new' cp variables are nowhere to be found. The 'rd' commands are still in there...
Avanish - You don't need to use the rdCmndPause command before rdCmdGotoFrame. the gotoframe command automatically pauses the playhead. If you want the course to continue playing after you jump to another frame, use cpCmndGotoFrameAndResume
In the list that Jim published with the properties of m_varhandle, I did see the new as well as the old variables? Checked several of them.
I hesitated to point out to Avanish that cpCmndGotoFrame does stop the playhead... had already been bit too critical in another thread.
onExit > execute advanced action
expression cpCmndGotoFrame = cpInfoCurrentFrame -1
This is satisfactory until the onexit bug is fixed. Thanks all
Lilybiri- Thanks for explaining me the on exit concept but I see no point in executing on exit action on navigating to some other slide. If on exit says pause ,and I have a button which says jump to some slide I dont want on exit action interrupting me in between, and if I want increment/decrement assign etc , I will go with On enter slide action rather than on exit , may be my understanding is different but I think this is very rare scenario.
Also I think solution provided by Avinash is correct , cpCmndpause =1 is required, I tried only with cpCmndGotoFrame = cpInfoCurrentFrame -1 but on HTML5 o/p i saw play pause button is changing their states very quickly, but when I put cpcmndpause =1 it work'd perfectly fine, @swmangold and Lilybiri did you check HTML5 o/p without pause thing, please let me know your observations.
@Avinash - finally your solution worked for me , but can you suggest me something better, When I am pause and if I want to continue I have to press Next button to continue , is it possible that if I press play button and I go to next slide ?
OK, I didn't explain well again, give up. Just warned that the On exit action (which I didn't say that it would be a navigation action) will not be executed if you have another interactive object that triggers navigation. I have been answering so many questions where an On Exit action seems not to be functional just because of that. Terminology is confusing: On Exit doesn't mean when leaving the slide, it means when reaching the last frame of the slide.
Will check the HTML-difference where the normal behavior of an standard action, not releasing the playhead, should be disturbed as you say. I didn't see such a behavior until now, but that doesn't mean you are not correct.
PLese use following action for every slide
On slide enter:
On Slide exit do following conditional action:
If slideenter =1
cpCmndpause = 1
cpCmndGotoFrame= cpInfoCurrentFrame- slideenter
slideenter = 0;
where slideenter is user defined variable set to 0 by default. Try this, let me know if it works ?
May I know what problem you faced ? Can you describe it , if you want I can send you a sample cptx file for which these actions are implemented. PLease provide your email .
There are two reasons why a click box in this scenario is not as good as an Advanced Action to pause the slide -
1. The click boxes take much longer to apply. You have to apply each click box individually to the end of the slide, manually change the timing, etc. Unless each slide in the project is the exact same duration, then a copy and paste of the button to all will still require individual tweaking.
2. I've found that, often, the TOC's "status" flag does not get updated/checked if a click box/button is used. I presume this is because the pause is skipping that very last frame.
I realize this thread/issue is old now, but I just ran into it this morning when trying to publish a project created in Cp 5.5 in Cp 6. It turns out that ANY slide created in Cp 5.5 (or, presumably, earlier) will ignore any Advanced Actions applied to it. In my case, I tried numerous things (deleting/recreating the advanced actions, re-applying them to slides, etc.) and nothing worked. But, if a slide is created from within Cp 6, then the On Exit Advanced Actions work fine.
An example to illustrate further: if you copy slides from a Cp 5.5 project into a Cp 6 project that already contains some slides, then those newly copied slides will not work with the On Exit Advanced Actions whereas the ones native to Cp 6 will. It's a bug, but not the end of the world, unless you uninstalled Cp 5.5 and no longer have it : (
There are some changes in the way Advanced actions do function in CP6, still exploring and will blog about the changes once everything is clarified for me. It is not the upgrade, but the way the On Enter and On Exit events do trigger advanced actions.
You are correct about the TOC, if the slide is not completely visited the slide will not be checked automatically in the TOC. But then I use the TickTOC widget from InfoSemantics.
Please note that the TickTOC widget is not compatible with Cp6 at this stage. Adobe has changed the way the TOC registers slide completions and the way we were detecting that in previous Cp versions with TickTOC no longer works in Cp6. We've let Adobe know and we're waiting on them to suggest a workaround. So far nothing.
Hello, has a solution to this been found yet?
Ive only been using Captivate for a week, so could be my inexperience but i seem to have the problem as well.
I have a slide with a button that opens an image. On the image another button closes the image, however if the slides duration has expired when either button is clicked, it proceeds to the next slide.
Any advice would be very appreciated, thank you.
Hello and welcome to the forum,
Hope you do not mind that I was smiling: you are posting on a thread in Advanced Adobe Captivate Users, which is a big contrast to your statement 'I've only been using Captivate for a week'.
This explains also why the original question is totally different from yours, and an answer to that question will not help you. The default behavior of a button is that when it is clicked not only the On Success action is executed (like Open Image) but the playhead is released as well. If you kept the default settings for the button, this means that the playhead will get past the Pausing point (at 1.5seconds) and gets in the inactive portion of the button (after the Pause) and moves until it is either paused again (by another interactive object) or it reaches the end of the slide and gets to the next slide.
First let us know how you configured those buttons? I suppose the image was originally invisible and the success action for the first button was to Show that image. But you also talk about ' another button on the image '? Does this mean that you use an advanced standard action to show both the image AND the close button? Do both buttons have a pause, and if yes, are those pausing points perhaps at the same time on the timeline? Please answer those questions and perhaps post a screenshot of your timeline and the stage with the objects?
Simplest way to me to avoid having the playhead to continue when a button with a simple action is clicked is to replace it by a standard advanced action. But since I first need an answer about how you arranged to have image and close buton appearing at the same time?
Here is an explanation of that difference between simple and standard advanced actions:
http://lilybiri.posterous.com/why-choose-standard-over-simple-action it has a link to a YouTube video as well.
BTW: which version do you use?
Wow, thank you for the rapid response, im very impressed.
I got to this thread from a google search so sorry for the wrong place, im certainly not an advanced user
After looking through your video I learned how 'Execute Advanced Actions' and this has resolved my issue.
My version is 6
Thank you very very much.
Please help - i tried to follow the link you posted here b/c i am hoping it will answer my questins but i can't seem to get to the video - only an artcle about the video and then when i click the link to watch the video i get asked to log in and get taken to general page - then i try to access again and no luck! Is video still available and how can i access it.
What i have is slides in Cap 6 with advanced actions which show and hide various pop up boxes with information. I want to user to be able to click them in any order and as many times as they want. Then to advance to next slide click the default navigation button for Forward. So when i converted out PPT's over to Cap - the large click box was created - i resized and dragged to a corner and moved taht box on the timeline to the very end.
But i am having problems with interactions working if the timeline reaches the end and don't knwo what to do...
I can't believe something whcih sounds so easy - wanting the slide to not advance until user clicks Forward - can be so complicated...
The video tutorial is also published on YouTube (plays fine for me from the blog post, do not know what happens for you):
Be careful with that work flow not to get into a loop...Because if you have an action Continue triggered by an ineractive object, you'll get again to the last frame, this advanced action will again be executed and slide will be frozen...