Reset Effects in Captivate 6

Intro

For a recent webinar about conditional advanced actions I recreated a file in Captivate 6 to check a Sequence of clicks, as described in the article. You can play with this file in the Example section. In this version I used a lot of custom motion path effects to put the cards on a stack. If the sequence is not correct, there is a reset button to offer the user a new attempt. And that meant that the motion effects had to be reset. I was very happy to find an easy way for this work flow, and that is the goal of this article.

Example

Play with this movie that has only 4 slides: on the first slide you choose between two ways of playing and will be navigated to either the second or third slide depending on the choice. On slides 2 and 3 in case of wrong answer you can reset the cards to their original position, on slide 2 this will happen with the Next button, after you checked the sequence with the Question Mark button. On slide 3 you have a reset button? Last slide will only be reached in case of a correct answer. Want to cheat? The sequence is 57142

Work flow

The work flow is pretty simple: you have to return to the very first slide, and using an advanced action on entering that first slide, redirect again to the slide just left. And the objects that had moved will be back in their original place, the effect is reset. I tried out different other work flows like navigating to the previous slide, but for some reasons it only is functional if you return to the very first slide. In the example movie, the On Enter action for that first slide is a bit more complicated because I have some more actions to be done, but in the next example I keep it really simple, just having the focus on resetting the effects.

Second example with details

Description

This example has 5 slides: Intro, TimeBased, ButtonTrigger, AATrigger and Summary. On slides 2,3,4 you'll find an effect applied to one object, first time-based, then triggered by a button and at last one triggered by an advanced action attached to another button. On slides 2 and 4 other objects with effects will appear, which was not possible for the slide with the button that triggers an Effect, because you can only apply one effect that way.

Shape buttons

I used default buttons from the Shape Button category, but changed the triggered actions. On the Intro slide there is only a Next button (used a rollover shape as tooltip). On slide 2 you'll find 3 buttons, timed for the rest of the project (and hidden on the last slide Summary). Each of them has a tooltip as well, and they all have a pausing point near the end of the slide, but play button pauses a little bit before the others:

Reset button: the default action for this button is 'StartSlide', and this is what I wanted it to do.

Play button: has a different functionality, depending on the slides

  • on slide 2 (TimeBased), slide is paused on entering, and this Play button will just release that pause by the statement 'Assign cpCmndResume with 1'. The playhead will continue, and the three objects that start on different moments will get visible with their effect.
  • on slide 3 (ButtonTrigger): no need to pause on entering, I covered the original play button with a transparent shape button that triggered the Effect on the hexagon by a simple action, thus limited to one object with effect.
  • on slide 4 (AATrigger): no need to pause on entering; again I covered the original play button  with a transparent shape button that triggered an Advanced action NewApply with two statements: "Apply Effect..." and "Continue". This button pauses at exactly 1secs, whereas the other objects appear after that time (see timeline). The Continue statement is needed to release the play head so that the other objects appear with their effect.

Advanced Action EnterIntro

This action, triggered by the On Enter event for the first slide (Intro), has to be conditional. It has to check if this slide is visited for the first time. To achieve this I created a user variable v_visited (no default value, so empty to start with) that will be set to 1 when the slide is visited for the first time. On all following visits, the user is navigated back to the last visited slide, the slide on which he clicked the Reset button. And that makes the magic happen: the object that was moved by the applied effect is back in its original location. The conditional action is rather simple:

IF v_visited is equal to 1

THEN Go to Last Visited Slide

ELSE Assign v_visited with 1

When returning to the last visited slide, all objects will be in their original place. Even if you have clicked twice the Play button! Try it out with the example movie. You'll see a different behaviour depending on the slides:

  1. On Slide 2 (TimeBased): pressing the Play button a second time will not have any effect, since the play head has stopped at the pausing point of the Next/Reset button and all effects have been played.
  2. On Slide 3 (ButtonTrigger): pressing the Play button another time will replay the Effect, since it is triggered by that button. But motion effects are always relative to the present position of the object. So.... the hexagon will move outside of the stage. 
  3. On Slide 4 (AATrigger): if you press the Play button again, the hexagon will move again (outside of the stage), but not the other objects. Their effects were time-based and the play head is at a position after those effects. If I had applied the effect to those objects by the Advanced action as well, they would have played. But then it was not possible to start the effects at different times.

Toggle Shape buttons - Captivate 6

 DevLearn 2012: Info

Intro

One of the well visited articles on this blog is Toggle button in which I explained how to create a custom button to change the state of the playbar, CC, audio from On to Off and vice versa. I explained there as well how to use the same Expression with a boolean user variable instead of one of the available boolean system variables.

In versions before Captivate 6 it was necessary to have such a button on each slide, cumbersome, even if they had always the same advanced actions attached to them so that Copy/Paste would do the trick. But now we have .... shape buttons that can be used both on Master slides or timed for the rest of the project as I explained in 'Why I like Shape buttons'.  This article had some simple use cases and I promised to show the scenario for a real toggle button. This is the subject of the present post, explaining how to create a toggle button to turn off/on Audio. There will be a companion video on YouTube showing the work flow. I'll offer you different scenarios, starting with a very simple one, and ending with a button that really shows the state of the Audio.

Scenario 1:  Shape Button with simple action

In the Shape category Buttons, you'll find a Mute button. It is already configured as a button, but without pausing and has a simple action attached to it:
Assign cpCmndMute with 1 

You can put this button on the main master slide, so that it shows up on each slide of your project, or you can put it on the first slide of the project and time it for the rest of the project.

If course this is not a toggle at all, it only allows to mute audio. And the user will hear, but not see the 'status' of the audio. Personally I think the icon on the button is misleading, because it seems more to point to 'play audio' instead of 'mute audio'.

The easiest way to change this shape button into a real toggle that can mute/unmute the audio is to change the Assign action into:

Assign cpCmndMute with 1 - cpCmndMute

This works fine, but from my recent article Why Choose Standard over Simple Action you know that if the shape button is paused, clicking on it to mute/unmute audio will also release the play button. And of course, the button will always look the same, will not show its status.

 

Scenario 2: Shape Button with standard action

You get it: change the simple action to a standard action, and the play head will not be released. To have it on each slide, you can again choose either to put it on master slides or to time it for the rest of the project on the first slide.

But still you are always looking at the same icon on the button, no difference between mute/unmute. Up to the third scenario:

 

Scenario 3: Shape Button with conditional action

You need two items to show the change of state. In my example I used a line shape, not functional as button, that would cover the original audio button in unmuted state:

The idea is to show/hide the line shape depending on the current state of the audio. The conditional action has to be able to address the ID of that line shape. Since objects on master slide do not have an ID, they cannot be addressed by an advanced action. That leaves me with two possibilities:

  1. Putting the audio button shape (from the Smart shape category Buttons) on the main master slide, and the line shape on the first slide, timed for the rest of the project.
  2. Putting both the the button and the line shape on the first slide, timed for the rest of the project. Both get an ID in that case, and I'm even able to group them.

Because of the low priority of objects timed for the rest of the project (as I explained in the blog post about Shape buttons), it is necessary to check 'Place Object on Top' for shapes that are timed tha way. It is up to you if you want pausing, hand cursor... Here is a screenshot of Timing and Options for the button shape. For the Line shape I only have the option 'Place Object on Top' checked and on the Timeline the line is above the button, not to be covered up by the fill of the button of course.

Conditional action

This action has 2 decisions:

  • Always is a mimicked standard action, that toggles the value of cpCmndMute the same way as in the standard action of Scenario 2
  • CheckAudio checks the value of  cpCmndMute, if it is 1 it will show the shape line, if not it will hide it.

 

Scenario 4: switch Shape buttons !!!

Yes, indeed, this was a very exciting discovery: you cannot have two regular button in the same location on a slide, even when you hide/show them alternatively. I explained this in the first article about Toggle button. But Shape buttons are different: you can have two of them in exactly the same place and this will now allow you to do the real stuff: a totally different shape to Mute and to Unmute audio. I really hope that all the users I had to tell that this was not possible before, will read this article. 

Watch this one slide movie, click the Stop button (shape filled with an image), it will switch to the Play button.

Both shape buttons trigger a standard advanced action, StopAudio, PlayAudio. SInce the audio plays on the slide when the movie starts, the Play button is initially set to invisible. And since both are shape buttons, you can put them on the first slide and time for the rest of the project to have the toggle available on all your slides. Like with scenario 3 putting on the master slide is not an option because the shapes need an ID to be used in the actions.

Conclusion

What I explained for an Audio toggle can of course be applied to all your toggle buttons: turning on/off CC, Playbar, opening/closing a TOC in overlay (with the new cpCmndTOCVisible variable), Play/Pause (video tutorial will be posted on YouTube), etc.

Captivate 6 - Advanced Actions

Intro

If you did read some of my posts, you'll know that I focus often on using Advanced actions in Captivate to extend its functionalities. And if you look at the just released version 6, like me, at first sight you will be disappointed because apparently nothing much has changed about Advanced actions: no enhancements in the user interface, only two possible new statements (play and stop an audio clip), still not possible to export/import/print/comment those advanced actions, etc. To re-use them you'll have to create a template, and here is a first positive note: it is now possible to save an existing cptx-file as a template.

Same as with the release of Captivate 5.5 I'll leave it to the Evangelists and other Captivate friends to talk about the big new features like new video demo, interactions, shapes, quiz enhancements, themes, shapes etc. Those more visible features, even though they are exciting, have never been targeted by this blog and I'm a focussed person. Hoping to find time to publish more in the near future, planning to use the new video feature to publish some YouTube videos about.... advanced actions. Let me know if you find that useful?

Favourites

On this release day, I want to tell you how two new features (my first favs) will save you a lot of time when scripting advanced actions:
  • object grouping
  • shapes used as buttons
For this purpose I recreated in CP6 a Game, explained in a previous post: Concentration Game. Can you have a look there and play the game if you do not remember about it? The CP6 version is a bit simplified, has less cards and only one image to discover. But the differences due to those new features will be very clear.

Later on, after having explored more in the released version (for the moment I'm still using an prerelease version) I will try to publish a list with my likes and dislikes, in the same sense as this one: What I (dis)like in Captivate 5.5.

Shape buttons

In the original game, each part of the image was covered up with three objects:
  1. a mnemonic-image to be disclosed on click, set for the rest of the project so that it has only one ID
  2. another image with the back of the card, visible before the mnemonic is disclosed, set for the rest of the project for the same reason
  3. a click box to trigger an advanced action:  this cannot be set for the rest of the project
In Captivate 6 I replaced the objects 2 and 3 by one Shape button. Contrary to other interactive objects, a shape button can be set for the rest of the project, to preserve its unique ID. Since now only two instead of three objects have to be addressed, advanced actions will be shorter.

Object Grouping

Long awaited feature: being able to group objects on the Timeline, to label the groups, to collapse/expand them, to make them visible/invisible on the stage for editing reasons. Less known: you can use the group label in advanced actions as well, to execute a statement on all the objects of the group. That is great for show/hide or for enable/disable actions. In the new game I choose to create a group with all the Mnenomics, and another group with the Shape buttons. When entering the last slide (Congratulations) all those objects have to be hidden. In Captivate 5.5 this resulted in a long list with Hide statements, 3 for each card (since I had three objects per card). In Captivate 6 you only need two statements: one for each group, whatever the number of objects in that group. That is really a great time saver.

Video

Do not judge me too harsh, this is my first try at the new video demo feature, have still a lot to learn by practice. If the video doesn't show up on your page, please watch it on YouTube: Advanced actions Captivate 6.
Watch the differences between the two games, and how both the shape buttons and the object grouping made the scripting easier in Captivate 6. Be sure, will blog more about actions triggered by Shape buttons! They cannot only be displayed for the rest of the project, but also be added to master slides and question slides. This opens new possibilities.

Concentration Game - created exclusively with Captivate

Intro

Another challenge popped up on the user forum:
"I am trying to recreate the Classic Concentration game. Does any one have any ideas how I would do this in Captivate?"
You can read the full thread here: How would I create the Classic Concentration Game?

And I tried to realise this exclusively with Captivate functionalities: no widgets, no ActionScript. There are of course limited functionalities as I will explain at the end. I have been using the possibilities of hiding/showing objects a lot in this example. For this reason I recommend reading a previous post about this subject: 

In this blog post you'll find the global concept of the sample movie. Later on I will publish a companion article that will explain the advanced actions in depth.

Example movie

Play with this SWF to get the feeling of the game. Only two games are available but the number of images can easily be extended without too much trouble. Have fun.
 

Work Flow

You'll find here the same subjects I explained in my previous post Look before you leap where I tried to give you a detailed view of my preparing brainstorming; the 'Leap' portion (construction of the advanced actions) will be treated in the article:

Situations - Slides - Events

Here are the situations that can occur in the game:
  1. Choice of a challenge: either Europe or North America will have consequences later on, so I'll need a variable
  2. Clicking a first card, content of card will be showed, has to be remembered (by user and by the game), so I'll need a variable
  3. Clicking second card, content will be showed and remembered (variable)
  4. Game has to compare the content of both cards (duo): correct/incorrect will have different consequences/branching
    1. correct: cards are removed (image visible based on choice), game has to remember this 'duo' was correct, next action of user 
    2. incorrect: cards are again turned, next action of user
  5. User can choose to guess: answer can be correct/incorrect
    1. correct: congratulations, game ended
    2. incorrect: next action of user

This game has only 5 slides (see also Advanced Interaction View in Gallery),and you can check the timeline of the slides in the Gallery images:
  1. Intro: is the welcome screen, where the user can choose between North America and Europe (for the hidden image) using two buttons. This slide is reused, after a wrong guess of the user (situation 5) he is navigated again to this slide (hence two text captions).

  2. Game: is the most complex slide, with tons of objects, and most objects are timed 'For rest of project' which leaves them with one unique ID; the click boxes on the 'cards' are triggering advanced actions that will show the cards, and there is a Guess button that navigates to slide 4. This slide will be explained more in detail later on.

  3. Second: to have more events for triggering actions I used this second Game slide that will appear after the user has chosen two cards to reveal and with the timing 'For rest of project' it has the same game objects; the user will be able to read the Success/Failure captions, and proceed with a Next button which returns him to the second slide Game.

  4. Guess: when the user has clicked the Guess button on slide 2, this slide is presented; it has the same game objects as on the two previous slides, and a Text Entry Box that will be validated. If the answer is correct, navigation is to the last slide, if it is wrong, navigation is to slide 1 Intro.

  5. End: shows the image totally even if not all cards have been removed, a relevant text caption depending on the image and a Text animation; this slide will only be reached when the user has guessed the answer correctly.
Events used to trigger actions, slide and object events:
  • Enter of first slide Intro to show/hide buttons and Text Captions: advanced action EnterIntro
  • Buttons on slide Intro (Europe/North America): advanced actions Bt_EU Bt_NA
  • Button 'Next' on slide Intro (only visible on second visit) triggers simple navigation to next slide
  • Enter of second slide Game: advanced action EnterGame
  • Click boxes (12) on slide Game: advanced actions CB_11, CB_12.... CB_34   (location in label: 34 = 3rd line, 4th position)
  • Button 'Guess' on slide Game triggers a simple navigation action to slide 4 
  • Enter of third slide Second: advanced action CheckSecond
  • Button 'Next' on slide Second is set to Continue, because exceptionally I used the next event (Exit) and have to be sure the playhead reaches the last frame
  • Exit of third slide Second: advanced action ExitSecond
  • TEB on fourth slide Guess navigates to slide 5 End if validation is correct, to slide 1 Intro if it is incorrect
  • Enter of last slide End: advanced action EnterEnd

Variables

  • v_void: empty variable to check if variable v_one is empty
  • v_choice: to store the choice of Europe (E) or North-America (A)
  • v_current: very important variable to save time when editing, it will store the content of the last chosen card (AE, DW, Fl, FW, ID or PR) 
  • v_one: stores the choice of the card if it is empty (first card of duo) by using the variable v_current
  • v_two: stores the choice of the card if v_one is not empty (second card of duo) by using the variable v_current
  • v_AE, v_DW, v_Fl, v_FW, v_ID, v_PR will get the value=1 if that duo was discovered
  • v_counter will increment by 1 with each new discovered duo; I didn't use it in this example, but could be used to have a different score at success depending on the number of duos that had been discovered before guessing the image
  • v_first: gets the value=1 after the first slide has been visited, because that slide is reused and has to show different objects on the subsequent visits.


Objects

The timelines in the Gallery provide information on the objects and are pretty simple for slides Intro, Guess and End. 

On slide Game you have a lot of objects (not all are visible in the Timeline image). The stacking order is here very important, as is the timing of those objects. And I really hope that next version of Cp will offer us the ability to group objects, to have them in collapsible folders on the Timeline. From bottom to top this slide has:
  • the two images to be discovered, one for North America, one for Europe; this could be extended to more choices or even more images from those two continents; images are set to display for 'Rest of Project', so when discovered (partially) this will show up in slides Second, Guess; on slide End they will be uncovered totally
  • for each card you'll find a trio of objects (highlighted for first card on the first row), for this example: 
    • PR1_Fr image of the content of the card (here the mnemonic for Premiere), needs to be the bottom one; I choose this label because it tells me about the content (first card with Premiere, Fr); this image is also timed for Rest of Project
    • PR1_Bk the 'back' of the card that is visible when the game starts (used a gradient for those, but you can of course use whatever image you want), timed for Rest of Project
    • CB_PR_11 click box over the card, that will trigger the advanced action CB_11; I used this longer label to be able both to identify the content and the place to make it easier to attach the advanced actions (and edit the duplicates)
  • Text Caption for the button Guess ("If you want to guess....")
  • Button Guess
On slide Second all the objects set to display for rest of project (from slide Game) will be visible as well as its proper objects:
  • Button Next, left to the default action 'Continue' 
  • Text Captions Correct/Incorrect: the proper caption will be visible based on the action On Enter for this slide; when exiting the slide both Text Captions will be hidden and user is returned to the previous slide Game

Actions

As mentioned before, I will not explain the actions in detail here (post would be too long), just the general idea of each action

EnterIntro
This action checks if the Intro slide has been visited already, if this is the case the choice buttons (North America/Europe) are replaced by the Next button, and the Welcome caption is replaced by the Sorry caption. After that check the user variable v_first is set to 1.

Bt_EU/Bt_NA
Action will populate the user variable v_choice and go to the next slide

EnterGame
Complex conditional action, that first resets the user variables v_one/v_second to empty (v_void). It will set the proper image to visible, based on the user variable v_choice. Then for each of the duos it will check if they have been discovered and display that situation (hiding the back and fore images of the cards to display that part of the image if duo was discovered), using the variables v_AE.....v_PR.

CB_11.... CB_34
Those actions will populate the user variable v_current and hide the back of the chosen card. Then either v_one or v_two will get the value stored in v_current, depending on the fact that it is the first or the second card.

CheckSecond
Action will compare the content of v_one and v_two to check if they are equal. If not, the incorrect caption will get invisible. For the correct duos this has to be checked for each possible duo (combined condition) because of the need to set the user variables v_AE....v_PR that are used for the action EnterGame. The correct caption will be visible, the appropriate user variable is set to 1 and v_counter will be incremented.

ExitSecond
Correct and Incorrect captions are hidden, navigation to the previous slide

EnterEnd
All cards are hidden (foreground and background), which will reveal the total image. The appropriate text caption relating to the image is made visible based on the user variable v_choice


Conclusion

Captivate is not Flash, and I'm perfectly aware that for this kind of games programming in ActionScript is better suited. I limited the number of cards to 12, but it can be extended to more cards and duos. More images to discover is easily possible as I explained before. But if you want to change the content of the cards, this will be a lot more work. It is possible to have a differentiated score depending on the number of duos that are displayed before trying/succeeding a guess. You can report easily the score to a LMS (attach it to the TEB on the fourth slide Guess) but if you want a differentiated score to report you'll get stuck like with other question slides (customized or not) because you cannot attach different scores to an interactive object based on a conditional action.


Anyway it was fun to try to create this simple game, it allowed me again to refer to the workflow and the hide/show functionalities that I explained in previous posts. Your comments are, as usual, very welcome.
 

Update

Yesterday eLearnDesigner posted a comment to tell me that she discovered a bug in the game: when a user clicks twice on the same card, it will be considered as a success and both parts of the image will be revealed. Thanks a lot!

Of course I had overlooked this possibility, and solved this by changing some actions:
  • CB11...CB24  here I added a statement to disable the click box that had just be clicked.
  • EnterGame both click boxes for the pair of cards were enabled again if there was no match.

 

Look before you Leap - in Advanced Actions

Intro

Allen Partridge in a comment on a post suggested that I should blog about the work flow, the logic when setting up advanced actions. I find this a very difficult subject for a blog post, much easier when teaching face to face or online teaching. But this new question on the forum, that I tried to work out is a fine example to give you some tips, about shortening developing time by sitting down a while to reflect about the situations you want to create. And you'll not believe it but I do sit down, take a pencil and paper at that moment, or start to scribble in Evernote if I can't find those venerable tools immediately.

I will not explain the advanced actions in detail (some screenshots in the Gallery), but focus on the work flow and offer some timesaver tips. 

Question

 "Is  there anyway of taking a  series of variable controlled numbers say 0-9  that have been punched into a keypad, and formatting them so that the  ones that are clicked on the keypad are displayed in sequence. E.g.  if you click 1,5,8 and 9 on the keypad, then in the next slide I want  1,5,8 and 9 to be displayed as the keypad code so to speak." The complete thread can be found here: Push button lock theory
Those of you who visit the Captivate user forums frequently, will not be astonished that I asked more questions to have a clear idea about the goal. And the user kindly provided me with the image of that push lock. So I got these details:
  • the user chooses the code
  • the lock has 13 possible digits: numbers 0-9 and letters X,Y,Z
  • a C-button allows the user to reset the total code
  • the code has 5 digits
  • the code must not be validated but only shown on the next slide, and navigation to that slide is by a button Next

Example

Have a look at this movie to understand better what I tried to achieve. It has only 3 slides: Intro, EnterCode and ShowCode.


Look before...


For this particular (simple) use case, what did I write down? And you'll see that I mostly define labels for everything as well.

Situations - slides - events

Which situations will be possible and will I solve this in one slide or in multiple slides?
  1. User 'pushes' one of the buttons to enter a digit: which means I'll have 13 events that can trigger an action - all those actions will be similar
  2. User wants to change the code and clicks the C-button: event that is different from the 13 previous ones
  3. User has entered 5 digits and tries to push another button: has to be taken care off for each of the 13 actions described in 1.
  4. User clicks Next to confirm his code: special event, which will cause navigation IF the user has entered exactly 5 digits
  5. User clicks Next but has not entered 5 digits: should be taken care off, no navigation in that case
In this case I decided to have only one slide EnterCode with all the events/actions and a second slide ShowCode to navigate to with the Next button (situation 4).
There are 15 events to trigger actions by interactive objects:
  • 13 click boxes, each covering up a digit (0-9 and X,Y,Z), decided to label them as CB_0, CB_1..... CB_X, CB_Y, CB_Z
  • 1 click box covering the C-button CB_C
  • 1 button But_Next
If I want to make it possible to restart the process of entering the code on the slide EnterCode it is a good idea to use the event 'On Enter' for this slide to re-initialise everything.

Variables

Mostly I make a list of the variables I will need and create them separately from the advanced actions. This is only a personal preference, I do see a lot of tutorials where the possibility to open the Variables dialog box from the Advanced Actions box is used to create variables on the fly.
  • Since the goal is to show the entered code in ShowSlide I need 5 variables that will store the entered digits. This seems logical, but I did see that the user started by creating one variable for each digit? I suspect this is the result of just starting right away in Captivate before reflecting on the goal :-). Those five variables will be used on the second slide to show the code in a Text Caption. 
    Variables will be labeled: v_one, v_two, v_three, v_four, v_five

  • To use the C-button to reset the code, I'll need my favourite variable that is totally empty:
    v_void

  • To track the number of entered digits for situations 3-5 I need a counter:
    v_counter

  • The last variable I didn't add immediately, but saved me a lot of editing time when creating the 13 similar advanced actions for the click boxes (see Actions).
    v_current will store the digit of the current Click box (1 if the user clicked on the 1, X if he clicked on X..); and for all those genius-programmers here I really appreciate the fact that the Advanced Actions do not request me to make a difference between a number and a string when defining a variable  :-)

Objects

On the slide EnterCode, with the image of the push lock, I'll need (see Timeline in Gallery):
  • 13 click boxes on the 13 digits: do not create them all at once! Create one click box, configure it (inc. the attached advanced actions), and test it thoroughly. Only after that process duplicate it as many times as you need (and use my shortcut keys for aligning without a mouse Moving and Resizing Objects); believe me: that will save you a lot of clicks.
  • 1 click box over the C-button
  • 1 button Next
  • Text Caption Instruction explaining how to enter and confirm the code
  • Text Caption Warning to show up when the user enters more than 5 digits (in the same location as the previous caption)
  • Text Caption TooLess to show up when the user tries to confirm with the Next button and didn't enter 5 digits, also in the same location; in this text caption the user variable v_counter is embedded
On the slide ShowCode there is only a text caption to show the code. Beware: when embedding the user variables v_one....v_five be sure to set the length of each variable to 1 and no spaces between the variables in order to show the code as a sequence.

$$v_one$$$$v_two$$$$v_three$$$$v_four$$$$v_five$$

Actions

Tip: you can use the same label for an advanced action as the label for the object it is attached to, provided that you first label the object! If you try to label the object after you attributed the same label to an advanced action you'll get an error message! I forgot about this for the button Next, that is why you'll see there a different label for the action and the button, because I labeled the button after creating the action.

CB_1  and similar actions triggered by click box with same label (screenshots in Gallery)

Will need a combination of a standard action and a conditional action with multiple decisions:
  • increment v_counter and store the digit (1 for CB_1) in v_current (standard action) in decision Counter
  • store the digit in the appropriate variable v_one, v_two...., v_five  (conditional with 5 decisions First, Second, Third, Fourth, Fifth)
  • checks if the user didn't enter more than 5 digits, decision TooMuch
CB_Reset  (triggered by click box CB_C and eventually on Entering the slide EnterCode)
This is a standard action (see Gallery)
  • resets v_counter to 0
  • clears the variables v_one....v_five by using the variable v_void
  • shows text caption Instruction (that could have been made invisible by a previous advanced action)
  • hides text captions Warning and TooLess (that could have been made visible by a previous advanced action)
Bt_Next (triggered by button But_Next)
This is a conditional action, one decision with a Then/Next section (see Gallery)
  • checks if v_counter
  • if Yes the text caption Instruction is hidden and TooLess is made visible
  • if No the user is navigated to the next slide ShowCode

...you Leap


My work flow (had 2 slides with background and image on first slide), sequential:
  • created all the user variables and added comment to each variable
  • created click box CB_1, CB_C, button But_Next
  • created text caption Instruction and formatted it, used Duplicate to create captions Warning and TooLess on slide EnterCode
  • created text caption on slide ShowCode with the embedded variables (set each to length 1)
  • added a testing Text Caption on first slide that shows the variables v_counter, v_current, v_one......v_five;  it helps when testing to see those variables change in real time; this caption will be deleted later on
  • created advanced action CB_1 from Properties panel for click box CB_1: started with first 2 decisions (Counter and First), tested, then added decisions Second...Fifth, at last added TooMuch; here it was possible to test everything because the user can select the code "11111".
  • created advanced action CB_Reset from Properties panel click box CB_C and tested it in combination with CB_1
  • attached this action CB_Reset also to 'On Enter' for the slide EnterCode
  • created advanced action Bt_Next from Properties panel for button But_Next and tested it (still with only 1 as possible digit)
The following steps are the tedious, annoying ones because all the creative work is done. That is why often bugs will enter in this process, perhaps my tips will help to avoid some:
  1. duplicate click box CB_1 as many times as needed (here 12), label and position each click box over the appropriate digit
  2. open Advanced actions dialog box; duplicate action CB_1, change the label to CB_2
  3. because I used the variable v_current you only have to edit the first decision (Counter): change the statement "Assign v_current with 1" to "Assign v_current with 2" and that is it
  4. repeat that process (2-3) to create all the advanced actions CB_3....CB_Z; close Advanced Actions
  5. in the properties panel of the click boxes, change the attached action: because labels of the click box and the action are the same this would be easy.
  6. test again in all situations to detect possible bugs

Conclusion

This is the first time I tried to explain the way my 'advanced actions' brain is tackling the process, and I do not have any idea if this could help. That is why I really would appreciate if you take a minute to post your comment and suggestions. What do you think about a YouTube video to show how the extra user variable v_current did save me a lot of time while editing the similar duplicate actions for the 13 buttons.




 


Custom Play/Pause button in Captivate

Intro

This a quick tip, to avoid me having to answer this question again and again on the user forum. It is pretty easy to have custom buttons to navigate to previous, next or even last visited slides, or to toggle CC. But the play/pause button is a bit trickier. The reason is that for this button 'twin' system variables are involved: rdcmndPause and rdcmndResume. In this post I offer three solutions. Watch the movie to see the difference/
 

Example

 
Watch this movie to judge the difference between the solutions. I reused some slides from a previous post (Playtime with audio and widgets) that have a bit complex and long timelines to allow you to test the Pause/Play functionality. You'll experience the three solutions in this sequence:
  1. on the first slide, clicking the Pause button, will make it disappear and the Play button will show up: simplest solution with two buttons
  2. on the second slide, there is only one button with the text 'Play/Pause) that is already a real toggle, but its aspect will always be the same
  3. on the third and fourth slide you'll find also a toggle button, but the text will change to show you are now pausing or playing

Work flows

Solution 1: Play button and Pause button

On the first slide at the start only the Pause button, labeled BtPause is visible, whereas the second BtPlay is hidden. If you expect the user to return to this slide, you'd better set this situation on entering the slide by another standard advanced action. Both buttons trigger a standard advanced action, PauseBt/PlayBt (see screenshots in the Gallery) with these statements:
  • Assign rdcmndPause with 1 (for action PauseBt) or Assign rdcmndResume with 1 (for action PlayBt)
    here you see why I call those system variables 'twins'
  • Hide BtPause   (for action PauseBt)  or   Hide BtPlay  (for action PlayBt)
  • Show BtPlay  (for action PauseBt)   or   Show BtPause  (for action PlayBt))
The buttons I used are custom image buttons, of course you can use whatever you want; if you replace the button by an image with a click box, you have to show/hide the image as well of course.
If you use this action on more than one slide, you'll have to create a duplicate action for each slide, because of the ID's of the buttons that will be unique on each slide.
 
Warning: do not try to put those buttons on top of each other, perhaps to simulate the behavior of a toggle button, because this will not function!


Solution 2: Toggle button with text 'Play/Pause'

The second slide has an example of this toggle, with the disadvantage that the user doesn't see which state the movie has: paused or not.
Here a conditional action PlayPauseBt is needed, with one single decision (see screenshots: both Then and Else images are available). 
 
IF:     rdcmndPause is equal to 0
If this is the case, the movie is playing

THEN:    Assign rdcmndPause with 1
the movie will be paused

ELSE:    Assign rdcmndResume with 1
the movie will resume playing


If you do not mind the fact that the button will always have the same aspect this is really the simplest solution, because the action has no reference whatever to an object. This means that you can use it multiple times without haveing to create duplicates or have editing work. 

Same remark: you can also replace this button with your custom button, perhaps replace the text by an icon etc.
 

Solution 3: Toggle button with text 'Play/Pause'

This button can be found on the third/fourth slide. This time I used a blank image button BtPlayOrPause1/BtPlayOrPause2 (one ID per slide), accompanied by two Text Captions: TCPause1 & TCPlay1 for slide 3, TCPause2 & TCPlay2 for slide 3. I need again a conditional advanced action, but reusing it will force you to make duplicates because object ID's are used in the action. In the Gallery you'll find screenshots for the action PlayOrPauseBt1 that is activated by the first toggle on slide 3. 
 
IF:     rdcmndPause is equal to 0
If this is the case, the movie is playing

THEN:    
Assign rdcmndPause with 1         the movie will be paused
Hide TCPause1                                 the text Pause will be hidden
Show TCPlay1                                  text Play will be visible
ELSE:    
Assign rdcmndResume with 1     the movie will resume playing
Hide TCPlay1
Show TCPause1

Conclusion

If you want me to create a template with the advanced actions, post a comment. These actions are pretty simple, only the labeling and editing part if you use them a lot in a project are bothersome. One of my secret hopes is that in a future version of CP it will be possible to insert interactive objects on a master slide and the issue with the unique ID's will be solved.

Playtime with Audio and Widgets

Intro

Holiday time means playtime, travelling to me. For personal reasons not travel for me this year. So thought it a good idea to offer you some information and fun about a small country that I visited several times being the home country of my husband. In this text I will not try to explain everything. If you want explanations about some of the techniques I have been using, please post a comment. Just know that I used of course Captivate but also enjoyed the roundtrip functionalities with Audition and Photoshop in the eLearning Suite 2.5 extensively. 

In several previous articles I have been using widgets that are included with Captivate. Those were all static widgets. But recently two great widgets were published by friends, and I had a lot of fun including them in this movie.

Since months I planned to offer some tips about audio, will try to keep them really simple (KISS) and as promised without long texts.

Playtime

Watch this movie and try to have a high score playing with the widgets described further. You'll need some patience, due to the many audio clips it is bigger than the files I normally add to these posts. You can also download it if you want.

Widgets

I used two widgets, one is an interactive widget and the other is a question widget. This means that both can be (and were) used to include scores in a quiz. Here is a short description of the widgets and of course a link to the sites where you can find them. Highly recommendable, both of them!

Drag and Drop Interactive Widget 
This interactive widget was released by InfoSemantics (by Rod and Tristan Ward) and can be found here: Drag and Drop Interactive Widget. Rod explains very well the functionalities of an interactive widget and offers also a comparison with their previously released Drag and Drop Lite Question Widget. Of course, I used Advanced actions to construct the Question slides created with this recent widget. Let me know if you want me to explain those actions in a more elaborate article. I love this widget for its great range of functionalities, especially in combination with advanced actions.

Jumbled Word Widget
This question widget was released by another Captivate-friend, Yves Riel (Flash-Factor) and can be found here: Jumbled Word Widget. Because it is a question widget, it takes over all functionalities of question slides. Just one example: here I used Captivate 5.5 and the new Review feature is automatically attached to the slide with the question widget. No need for advanced actions to add scores to the Quiz in this case. But of course you also get the limitations of question slides : no way to have a partial score (as I created with the other widget for dragging the names to the map). I love this widget for its great design and it confirmed what I suspected since a while: Yves is a perfectionist!

Audio

A lot of audio was used in this movie: background (drums music), slide audio (some of the Voice overs are attached as slide audio) but the most powerful way to add/control audio is using object audio. Some reasons with examples:
  • Object audio allows you to have more than one audio clip playing simultaneously without having to create a multi-track audio file. 
    Example: slide 8 with the rollover slidelets; each slidelet has two audio clips, the first is attached to the image, and the second (Voice over) is attached to the Text Caption that appears later. This allowed also to fade out the first music clip, without effect on the Voice over.

  • You can manipulate object audio by (advanced) actions: hiding the object results in the audio not playing, showing the object plays the audio. If you want an audio to play only the first time that a slide is visited, this is a solution: attach the audio to an object that is visible to Captivate but not to the user. To myself I call those audio clips "audio objects".
    Example: the question slides constructed with the widgets have a Voice over that plays when the user takes the quiz, but not when he is reviewing the quiz. Moreover some question slides have a music clip as well, that will only play during the Quiz time, but not when reviewing. This was realized by attaching each music clip (VO and music) to a rectangle with a stroke width of 0 and a Fill with Alpha=0, thus making it invisible to the user. With an advanced action I hide those rectangles when reviewing, resulting in not playing nor the VO nor the music.

  • Same technique can be used to play another music clip in different situations.
    Example: I did not imply it in the movie because it was already very heavy, but this can be used to replace the Text Captions (Review Messages) in the Question slides created with the Drag and Drop Interactive Widget by Voice overs, or to add a Voice Over to those text captions.

I do feel that you have more questions, but I promised a no-text-heavy post this time. If you want me to explain something more in depth, please post a comment.

Have fun! 

Be unique! (labeling actions)

Intro

 
OK, I already confessed about being a labeling freak. A while ago I have tried to list all the advantages of labeling slides, objects, variables, actions Some reasons for labeling. But I never imagined that this would cause me troubles one day, make me bumping my head because I couldn't figure out what was going wrong. I owe it to you, loyal reader and follower, to avoid the same pitfall and will try in this blog post explaining what I will hopefully never forget again.
 

Unique labels

As you can detect from the title, the issue I had was linked with a label not being unique. I will first list up the rules to keep in mind for this uniqueness, for the different categories of items. Do not forget as well that all labels are case sensitive: 'One' is considered different from 'one' and from 'ONE'.
  

Object labels

Each object needs a unique label, even though it has already a unique ID. That is not really a problem, because when trying to assign a label to an object that is already attributed, Captivate will show this message
is either a reserved keyword or is already assigned to another item. Provide a different name for the item.
This means that Captivate is checking object label uniqueness all the time, and I feel safe.
 

Slide labels

You can assign the same label to different slides, Captivate doesn't apply this rule to slides. You can even use a label that already has been used for an object, a variable or an action. No problem.
 

Variable labels

Trying to apply the same label to a second variable will also result in a checkup and message by Captivate:
This variable name is already in use. Enter a new name.
Fine, feeling safe again, isn't that what software is meant to do? And Yes, you can assign the same label to a variable that is already assigned to an object. A typical example is a Text Entry Box. If you keep the default labels assigned by Cp both the TEB itself as the associated variable have the same label: Text_Entry_Box_1
 

Action labels

If I assign an identical label to a second advanced action, at the moment I want to save or update the script, my guardian angel Captivate tells me politely :
The script name is already in use
It will stop the saving operation and leaves the script intact, I can change/edit the action name and save it successfully. This rule is applied to all actions, no difference between conditional or standard actions they all need a unique label. As for the variables, you can use a label that is already given to an object and/or a variable safely. That can help identifying them if you have a large bunch of actions. Examples:  if you need an advanced action for each slide on entering, you could assign the same label to the slide and the action; if the action has to be triggered by a button use the same label etc.
 

Decision labels

In a conditional action you can have different decisions, also called 'internal actions' in contrast with the complete advanced actions that are called 'external actions'. Default label here is Untitled, but I like to change that to a more meaningful one. And like for slide, apparently here it is possible to have identical labels, no checkup by Captivate. But why should one use identical labels?
 

External actions - internal actions

I'm smiling because now I see virtual question marks in your eyes: "What was the issue then?'. Let me try to explain, what I was told by the Adobe team as an answer.
 
The external actions are the total advanced actions, conditional actions as well as standard actions. Captivate will always check if a new label is unique and offer you the message I described above under 'Action labels'.
 
In a conditional action, each decision is considered an internal action. When you create a new decision in an conditional advanced action, and label it, Captivate will also check something:
 Captivate checks if the label attributed to a new internal action isn't already attributed to an external action !
This seems strange to me, because it doesn't even check the uniqueness for the different internal actions in one conditional action. It would have been OK however if I got a similar message as for the actions, that told me that 'the script name is already in use'.
 
BUT!!! Captivate doesn't tell you anything, from the second decision on it just deletes the internal action that you wanted to save without any warning. This is a bug, that is still there for the moment.
 
Two examples for you to try out and to understand the problem better :

Example 1 (if you are lazy, watch the recording of this scenario)

  1. Create a standard action, label it test
  1. Create a conditional action, label it TEST: no problem, due to the case sensitivity, Captivate will accept this label when saving.
    1. create a first decision, default label will be 'Untitled', save the action
    2. change the label of this decision to TEST,  same name as the total conditional action, try to save and you'll get a message (great!) "Script update is not successful", Captivate did his homework.
    3. since the label was rejected, change it again to test (which is already attributed to another external action); again message appears, change to another label and save.
    4. create a second decision with name test and fully script it, choose Update, you get the message 'Script update successful', you trust CP and clicks on OK: and your second decision disappears...Captivate when checking did detect that the name already existed for an external action, but gave you the wrong message and deleted without warning.
If you revert 1 and 2, create the conditional action before the standard action, everything will work fine: when creating the standard action test Captivate only checks the other external actions, not the internal action etest that already xists in the conditional action.
 

Example 2

  1. Create a standard action, and label it Untitled
  2. Create a conditional action, leave the default name for the decisions set to Untitled
    1. create the first decision (Untitled), save the action and you get the message 'The script name is already in use', change the decision name
    2. create a second decision (Untitled), try to update, you get the message 'Script update successful' and when clicking OK, second decision is deleted.

Conclusion - tips

  • Never create an advanced actions with the label Untitled
  • If you have to create a conditional action with multiple decisions - internal actions, be sure to have a list with the names of the already created actions ready. I tend to keep that list in the scratch area of Captivate.
  • If you can cope with it, do not have too much decisions, leave their labels to Untitled (do not like that as you know)
  • If you label decisions in a conditional action, starting with the second decisions PLEASE check your list with existing action labels before clicking on Update.

Update: new features in release 5.5 that I used

Since Captivate 5.5 has now been officially released, I can tell you that the splash screen of my video was created with the new Gradient feature of this release. This gradient tool is fully customizable and a great way to enhance objects. In the movie I also used the new Shadow and Rotate features that are now available for all kind of objects. Both of them were used on the end slide: the Text Animation 'Where is my internal action'? is rotated with the Transform Accordion and I applied a shadow to the characters. There is a screenshot below. BTW: in the SWF published in the post Extended widgets for custom MCQ and T/F Questions I used the shadow feature a lot of times, explore...
 
 
 

Customized Progress Indicator

Intro

Do you use the Progress Indicator for Quizzes? I'm very frustrated about that indicator: you have the choice between a Relative or an Absolute indicator, you can adjust the style using the Object Style Manager, but... no way to change the phrasing of that indicator. It is always 'Question X of Y'. If you are an unhappy Captivate-user that needs to localize a lot of courses, this is really annoying. My Dutch-speaking students want a Dutch indicator, my French students want a French indicator etc.
 
It is really not so hard to create your own Progress indicator for Question slides, using rather simple advanced actions and a dedicated Master slide. In this tip I will explain the work flow step by step
 

Example

Play this movie to check the result. In this Quiz I do have 6 question slides. The first 3 questions use a master slide with a progress indicator in English, the last 3 use a similar master slide but with an indicator in Dutch. Do not panic: all questions are in English.

Work Flow

  • User variables: create 2 user variables, I labeled them
    • v_begin  to store the slide number of the last slide immediately before the first question slide 
    • v_current  to store the number of the question; since there is no accessible system variable for this information I will have to detect it from the current slide number

  • Advanced actions: create 2 advanced (standard) actions, I labeled them:
    • IndBegin: to be triggered on entering the last normal slide before the first question. It has only one real statement: to store the current slide number (system variable rdinfoCurrentSlide) in the user variable v_begin. First image in the Gallery shows this action.
    • IndCurrent; to be triggered on entering each question slide, it calculates the question number and stores it in the variable v_current. I do use the system variable rdinfoCurrentSlide again combined with the fixed  number stored in v_begin. Second image in the Gallery shows this action.

  • Attach the actions IndBegin to On Enter for the last slide before the questions and IndCurrent to all Question slides as the same On Enter action (can be done in one operation, select all the Question slides and use the Properties panel, Action accordion)

  • Master slide: create the master slide to be applied to all the Question slides. In this example I created 2 Master slides for the English and the Dutch questions, both based on the General master slide (for the background). Insert the text caption that shows the sentence to be used for the Progress indicator. The used variables in my Progress Indicator (see third image in the Gallery) were:
    • v_current the current question slide number, calculated with IndCurrent action
    • cpQuizInfoTotalQuestionsPerProject is a Quizzing system variable that shows the total number of questions in the project, you can of course also introduce this manually but I do not like to count myself
    • cpQuizInfoPointsPerQuestionSlice this is a bonus, not necessary but extra information for the learner, a Quizzing system variable as well. 

Conclusion

Hope you liked this small tip, and will be inspired to use variables on master slides.
 
 
 

 

Extended widgets for Custom MCQ and T/F questions

Intro

A while ago first part of my soap about using Widgets to create customized Question slides, types Multiple True/False and Multiple Choice: Widgets and Custom Question - part 1 was published. The used widgets (included in Captivate 5) were the Radiobuttons and the Checkboxes widgets. Second part was about using the TextArea widget: Widgets and Custom Questions - part 2 for Short Answer and Fill-in-the-Blank questions. Those default widgets cannot be 'reset', which means that you can change their associated variables using advanced actions, but the change will not be reflected on the stage for the user. If you want to offer the user multiple attempts that can be annoying. One of "our" great widget developers, Jim Leichliter offered an extended version of the TextArea widget as an answer to my complaint. This proves (again) how friendly and dynamic our Captivate Community is. In my last post I blogged about the improved functionality of this extended widget. And I got a positive answer on my request if he would be willing to extend the Radiobuttons and Checkboxes widgets as well. Again, he offers those extended widgets for free on his blog site:

RadioButtons Enhanced
CheckBoxes Enhanced

Both enhancements were created using the 'awesome cpGears widget framework' (citation of Jim), by another Captivate friend, Yves Riels. Find him on his blog, I love his InteractiveLabel and NotePad widgets a lot, but he has a lot more widgets to offer: Flash-factor

As promised to Jim, in this blog I'll try to explain the added functionality of those enhanced Radiobuttons and Checkboxes widgets. And watch out for an important warning later on. For those contaminated with AAAD (Advanced Actions Addiction Disease) detailed explanation of the actions are explained in this companion article:

Extended Radiobuttons and Checkboxes Widgets for Custom Questions


Example

Play this SWF to get an idea of the enhanced Retry options. I did use the same quiz as in the original blog post (part 1 - see link in the Intro). But in the original version there was only a Review option, this time I added a Retry option with 3 possibilities: either change the entered answers, or start from scratch (default work flow when choosing Retake in a regular Captivate Quiz), or preserve the correct answers and only retake the incorrect ones. Explore, and would love to hear what you think about it.


Widgets and variables

Three images in the Gallery do show the configuration of the widgets I used:

  • MCQ1: is a RadioButtons Widget used for a Multiple Choice Question with only one correct answer (second question in the movie); the associated variable is labeled MCQ1Answer (case sensitive) and the possible values are different app names. The configuration is the same as for the widget coming with Captivate. Difference is that when you change the value of the variable MCQ1Answer, it will be visible on the slide. If you choose the option Retry Totally, where you can start from scratch, an advanced actions will assign the value 0 (zero) to MCQ1Answer and the result will be that none of the radio buttons is checked on stage.

  • MCQM: is a CheckBoxes Widget used for a Multiple Choice Question with multiple correct answers (third question in the movie); the associated variables (one per option) are labeled CP,SB,PS,RH,Ac (case sensitive) and have to appear in the same sequence as the values Captivate 5,Soundbooth CS5,Photoshop,RoboHelp 9,Acrobat X. By resetting the variables to the value 0 (zero) all check boxes will be unchecked on the stage as is the case for the Retry option 'Totally.

  • Radio1: is one of the 4 RadioButtons Widgets used for the slide with multiple True/False questions (first question in the movie) - the others are labeled Radio2, Radio3 and Radio4; each had an associated variable, labeled TF1 (TF2, TF3, TF4); assigning the value 0 (zero) to a variable will deselect the radio buttons on stage.


Tips

  • Do not stack an interactive object on top of the widget(s) or they will not be functional. An example: if you put a click box over a widget that covers it all up, the widget will not work.

  • You can have multiple widgets on a slide, and they can cover up partially; this is the case for the slide with the multiple True/False questions as you can see in the image in the Gallery.

  • Do not bother to resize the widgets if they seem not to display everything, on review or after publishing everything will be OK! Look at the fourth image in the Gallery: the word False seems to be cut off, but shows up all right in the movie.

  • Formatting can be tedious: have a look at the Radio1 widget: I changed the font, font size, color (Dark blue #270067) and the 'highlight' color to the same color as the blueish grey of my background (#E3E3E3) to have it blend in. Why do I tell you the color code? If you are not using one of the sample colors in the color palette, the only way to have consistent colors is to type in the code. An example: to search for the code of the background I had to sample that color using the Pick Color tool that is available in the color palette for the Fill color in the Toolbox (vertical toolbar normally at the left of the stage). Because that color will not be automatically added to the samples in the color palette in the Widget dialog box, and since there is no Pick Color available in that box, the 'simplest' way to have the correct color is typing it in. You imagine some of my feature requests ;-)

  • NEVER DUPLICATE A WIDGET. Yes I'm shouting, because trying to reduce the formatting labour for the 4 RadioButtons widgets on the True/False slide, I did duplicate a widget. Every formatting was kept, and thought I only had to change the associated variable, because all other settings are the same. This will not work! The variable in the duplicate will never get a value. Do not follow my example this time, always insert the widget again and again and again. Change the formatting settings again and again and again. After a while you'll know all the color codes by heart.... 

And now...

waiting for the third episode: using dropdown and combobox widgets to create custom questions...