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.

Quiz and Frustration?

Intro

Bit puzzled by the title, and perhaps baffled by the fact that I produce a second article this week :-)

In this thread on the user forum, I got another challenge, quote: " If I have an assessment simulation with questions and a learner must attain 80%, is it possible to set up something that stops the assessment if the learner has no chance of passing? " Normally the user wants to navigate the learner outside of the assessment to review the course. In this post I will only explain the setup to get the user immediately to the score slide, when it gets impossible for him to reach the passing score. The action in this case is to advice to Retake the Quiz, but of course it would also be possible to navigate the user to other slides, as long as they are inside the quiz scope. The concept of quiz scope I explained already several times, and showed yesterday in another article.

Example

I tried to work out an example with simple Question slides that would be valid in most circumstances: total score is not fixed, number of questions is free, score/question can be different. In this screenshot of the Advanced Interactions Panel you see that I have 6 question slides, all with a different score and the total score is 25points. Quiz settings require at least 20 points (80%) to pass. Play with this quiz please. You have 3 possible attempts on Quiz Level. Review is not available (is possible, but in this case would have complicated the advanced actions and wanted to provide a 'simple' solution).


Slides - events - objects

On the score slide, an initially invisible polygon with text Message has been added that will pop up if the user is taken to this score slide without having been able to finish all the questions. 
In this work flow I only use On Enter slide events:
  • Slide Quest1 (first question slide) triggers an initializing standard advanced action EnterOne
  • Slides Quest2-Quest6 trigger the same conditional advanced action EnterSlide
  • Slide Score triggers a conditional advanced action EnterScore

Variables

Some Quizzing system variables are important, and beware: this scenario is only possible for Captivate 5.5 because in that version those variables are updated after each Question submit. It is also possible with 5.0 but bit more cumbersome. Let me know if you want me to explain

  • cpQuizInfoTotalQuizPoints   stores the maximum possible score (25points in example) - fixed value in CP5/5.5 and same as cpQuizInfoTotalProjectPoints
  • cpQuizInfoPointsPerQuestionSlide stores the score attributed to the present question, will get its value when the question slide gets to its first frame, but has still the value of the previous question during the On Enter event
  • cpQuizInfoPointsscored  stores the result obtained by the trainee, will get its value in CP5.5 after the Submit action on a Question slide, so still has the value of the previous question when entering a question slide; but in CP5.0 this variable is not updated after each question! Workaround there is to add the score of cpQuizInfoLastSlidePointScored to a user variable to calculate the present score after each question.
  • cpQuizInfoQuizPassPoints the number of points specified to pass the quiz
I created three user variables to do some calculations:
  • v_MaxUntil: will get the maximum score that could have been acquired if the user had answered correctly every question up till now
  • v_MaxRemain: will store the maximum score that can be acquired with the remaining questions; sum of v_MaxUntil and v_MaxRemain will be equal to the total score cpQuizInfoTotalQuizPoints
  • v_Rest (sorry for the Dutch): maximum score that user could have if he answers every future question correctly, this will be compared with pass score

Advanced actions

EnterOne triggered on entering the first question slide

This is an uncomplicated standard advanced action that will reset the 3 user variables:


EnterSlide triggered on entering all question slides except the first

This conditional action has two decisions:
Maths: is a mimicked standard action (condition is always correct, so the THEN statements will always be executed) 
  • increments v_MaxUntil with the maximum score that was attributed to the previous quesiton,  cpQuizInfoPointsPerQuestionSlide 
  • calculates from v_MaxUntil and cpQuizInfoTotalQuizPoints the value to be stored in v_MaxRemain
  • calculates v_Rest by adding v_MaxRemain to the points already acquired, stored in  cpQuizInfoPointsscored  

CheckBranch: checks if the trainee is still able to get a passing score by comparing v_Rest to the system variable cpQuizInfoQuizPassPoints. If pass is no longer possible there is an immediate jump to the score slide. Both for THEN and ELSE there is a Continue statement (only statement for ELSE).

Note: perhaps you are wondering why I do not execute something similar after the last question? Reason is that, even if the user fails to pass by answering incorrectly the last question, he will always get to the score slide and see the Message. 

EnterScore triggered on entering the score slide

This conditional action has only one decision, same as the second decision for EnterSlide. If the user was navigated to this slide or didn't pass (in case of answering all questions) the special Message will pop up.

Conclusion

This scenario, with the advanced actions that are versatile, can be used whatever the number of questions or the values of the individual scores/total score/passing score is well suited to be stored in a template. Just a suggestion :-)





Audio Objects: Control them!

Intro

Last year I published Playtime with Audio ... where I introduced the term 'Audio objects'. This is audio attached to an object that is invisible to the user, has no other functionality than offering the possibility to control the audio by hiding or showing the 'invisible' object using (advanced) actions. Since that blog post I got several questions about controlling the audio objects. In the example you will view here, I focus on audio objects for question slides. And some other tweaking occurred as well, that I will perhaps explain in a later post. Here we go

Example

View this movie and watch/listen carefully. You'll see two question slides, both Multiple Choice Questions. The first, with radio buttons, has only one correct answer and I used the Advanced Answer options to give feedback and to branch to more information about the answers. The second question has multiple correct answers, so Advanced Answer options are not possible there. Both question slides have an audio object (same for both to keep filesize restricted), that will play only on first visit of the slide. From the first question slide you will be navigated to another slide and then returned to the second question slide. The second question slide has the same audio object, but when submitting an answer, you'll get audio feedback and the audio on entering is stopped even if it is not yet finished playing.

Audio Object

For the invisible object to which the audio is attached I will mostly use a Highlight box with a dedicated style 'AudioObject', that I cloned from the original Highlight style. Because I created that style before opening any project, it is available in all my projects. When planning to use a lot of audio objects I will even set it as the default Highlight style. Why do I choose for Highlight box? First of all, because it has a style, which is not the case for any drawing object (which otherwise would be my choice). Secondly to make it invisible just set the Alpha for the Fill to 0 and the Stroke Width to 0 as well. 

Work flows to control Audio Objects

Play only first time

On entering the question slides, I trigger a conditional advanced action EnterOne/EnterTwo that uses a created user variable, one for each question slide: v_one, v_two.
This variable will be incremented and then checked. The first time the user enters the slide, it will be 1 and the audio object will play because it is set to visible. All subsequent entries will result in a value greater than 1 and the conditional action will hide the audio object, which means that it will not play. Here is the description of the conditional action:
  • First decision Increment is a mimicked standard action to increment the user variable. Here is a screenshot from EnterOne.

     
  • Second decision CheckEntry checks if the value of v_one (v_two for the second question slide) is greater than 1; if that is the case, the audio object AuEnter1 is hidden and Continue is added to avoid blocking the playhead, if not only Continue is needed in the Else portion. Screenshot from EnterOne:


The action EnterTwo is similar to EnterOne, you only have to switch the variable from v_one to v_two and the audio object from AuEnter1 to AuEnter2 (because I labeled those objects that way).

The advantage of having all actions executed on entering this question slide is that it doesn't matter from where the user is navigated to this slide. In this use case it is important, because the first question slide can navigate to five possible slides. If you added the condition to an interactive object on those slide, you'd need to have 5 different actions, and another one for the Retake/Review navigation from the score slide.

Stop audio when other audio starts

If you listened carefully to the movie and quickly entered an answer on the second question slide (about eLearning Suite), you will have noticed that the audio object that was played on entering the slide (if first time) is cut to be able to listen to the feedback audio. This is bit more complicated, because I had to tweak the functionalities of the question slide. This was my work flow:
  1. Kept only the Incomplete Text Caption, but delete the Correct and Incorrect Text Captions
  2. Unchecked the Back button but allowed Backward Movement in the Quiz Preferences (see later)
  3. Created two Text Captions: TCWrong and TCCorrect that have audio attached to them but are set to Invisible (uncheck Visibility in Properties panel)
  4. Created a Success2 and Failure3 advanced action to be triggered on Success or on Failure (allowed only one attempt on Question level)
Here is a screenshot of the Properties panel of that Question slide:

Success2/Failure2 are similar standard Advanced actions that do hide the audio object AuEnter2 (playing first time when entering slide), show the appropriate Text Caption and the inevitable Continue statements.

Be careful: the playhead on this question slide will stop at the pausing point of the question slide. In this screenshot of the Timeline this is at 1.5 seconds. In order to 'hear' the audio attached to the Captions TCCorrect/TCWrong you have to move the start of their timeline close to that pausing point. I do not pause the slide, the playhead once released by the Submit button will get on and on reaching the end of the slide continue to the next slide (Score). So I had to extend the duration of the Caption timelines to be as long as the longest audioclip attached to them. 

Other tweaks

As told in the Intro, I will not explain the other tweaks that I have mostly treated in other blog posts like Question Question Slides. Here is a short list:
  • Changed the Skip button to Next, and dragged it under the Clear button
  • Extended the Quiz scope to be able to navigate to the explanation slides (that are before the question & score slide) by adding a scored object (Next button) on first Intro slide (not to include in Quiz total)
  • Because Retake/Review will navigate to the Intro slide, I created a EnterIntro conditional advanced action (similar to the other Enter actions) that navigates immediately to the first Question slide if the user visits this Intro slide not for the first time
  • The Next buttons on the slide do not always navigate to the real next slide, but are used for branching when necessary.
  • To explain difference between Click box and Button I used 3 slides, and the possibility to show the Timeline for more than one slide
If you have more questions about those tweaks, or suspect that my list is not complete, please feel free to post a comment.


Sequence Check

Update

New version of this workflow, with example output to HTML5 and using new features can be found in this post:

Sequence Check slides (updated)

Intro

Another challenge on the user forum, http://forums.adobe.com/message/4387510#4387510:  "wonder if it is possible to have 5 click boxes on a slide that must be clicked in a specific order before the slide will advance?" Had to ask for some more details. There are no extra (wrong) click boxes on the slide, the check for a correct sequence could be done by using a Check button, and the Next button should appear on the slide only when the sequence of clicks is correct. The user wanted to have the possibility to check after 5 clicks or to have an 'intermediate' check after each click. I thought it also to be a good practice to disable a click box immediately after it has been clicked, since a double click on the same click box was not wanted. 
 

Example

Play with this SWF. You'll find two similar slides after the introduction slide. 
  1. On slide First the Check button will appear after having clicked on the 5 click boxes in the sequence you wanted. You can watch the number of clicks in a Text caption at the bottom. Once a click box is clicked it will be disabled. If your sequence is not correct, all will be reset and you can try again.
  2. On slide Second you'll have the Check button from the start and you can use it at any time. If the check results in at least one wrong click, you'll get a Reset button. After the last click, if the sequence was correct the Next button will appear.

Slides, objects, labels and events

Slide First: 

  • 5 click boxes (that cover up rectangle shapes). I labeled those click boxes in the sequence they should be clicked: first CB_1, then CB_2 etc; each click box will trigger an advanced action with the same label. That is only possible because the click boxes were labeled before the actions.
  • Buttons: BtCheck1 that will trigger the advanced action SeqCheck and button BtNext1 that has the action Go to Next Slide; both are initially invisible
  • Text Captions TCNumber (shows the number of clicks), that is visible and set to show for the rest of the project (also needed on slide Second)
  • Text Captions TC_Wrong/TC_OK1 that are initially invisible and used for feedback in the action SeqCheck

Slide Second

Because variables have to be reset, the On Enter event of this slide is used to trigger the Advanced action Enter2.
Almost identical to the first slide. Because the click boxes do get another ID, but trigger the same advanced actions CB1... for once I didn't even label them :-). The Text Caption TCNumber is still visible on this slide, because it was timed for rest of project. Other objects are:
  • Buttons: BtCheck2 (visible) that will trigger the advanced action SeqBis and button BtNext2 (invisible) that has the action Go to Next Slide
  • Button BtReset (initially invisible) that triggers the advanced action BtReset (same label possible because button got it first)
  • Text Captions TC_Some/TC_OKUntil/TC_OK2 that are initially invisible and used for feedback in the action SeqBis
 

Variables/logic

Only two user variables were created to be used for checking the sequence:
  1. v_counter: will count the number of clicks (correct or incorrect); this user variables is visible in the text caption TCNumber. For that reason I gave it a default value of 0, so that it will also show a value in the text caption when no click has occurred.
  2. v_correct: will be incremented when a click has been in the correct sequence. 
The first variable will be used twice in my logic:
  1. to check if the click sequence is correct, for the click box CB_1 that should be clicked first I check "v_counter = 1?", for CB_3 it will be  "v_counter = 3?' etc and increment v_correct if that is the case
  2. to check if until now the sequence was OK, which will be the case as long as v_correct is identical to v_counter

Advanced actions

CB_1, CB_2.... CB_5 

Those are  triggered by the click boxes with the same name on first slide, and also on second slide; similar conditional actions with 3 decisions:
  • Count is a mimicked Standard action, disables the click box, increments the variable v_counter and hides caption TC_Wrong if it has been made visible in a previous sequence.

  • Check as explained before will test if v_counter = n where n=number of the click box; if this is true, the var v_correct will be incremented; no Else action is needed.
     
  • ShowBtCheck  checks if  v_counter = 5 and if that is the case the button BtCheck1 will be made visible

     

SeqCheck

is  triggered by the button BtCheck1 is a conditional action with 1 decision Sequence
It checks if the variables v_counter and v_correct have the same value, which means that the sequence was totally correct. In that case the correct feedback caption TC_OK1 is made visible and the Next button.
 
If the condition is not fulfilled the other feedback caption TC_Wrong gets visible and everything is reset so that the user can try again:

  • v_counter and v_correct are reset to 0
  • button BtCheck1 is hidden again
  • all click boxes are enabled 

 
Enter2

is triggered on entering slide Second
This is a simple standard action, resetting the variables by assigning the value 0 to them.

SeqBis

is triggered by the button BtCheck2 is a conditional action with 2 decisions:

CheckUntil valid for intermediary checks, before all click boxes are clicked, will show the correct feedback caption (TC_Some, TC_OKUntil) and show the Reset button if the sequence is incorrect so far; this is a decision with an THEN/ELSE branching

End only will show the BtNext2 when all click boxes have been clicked and the sequence was correct.



BtReset

is triggered by the button with the same name on slide Second is a standard action that:
  • v_counter and v_correct are reset to 0
  • all click boxes are enabled 
  • Reset button is made invisible

Conclusion

In this example I really appreciated the duplicate and copy/paste functionalities of Captivate:
  1. Started with the first slide and the first click box. Created and attached the advanced action to that click box. 
  2. Duplicated the click box 4 times and positioned the duplicates over the rectangles
  3. Renamed each click box, opened the attached advanced action and duplicated that as well, renamed as well and edited
  4. For the second slide I duplicated the first slide
  5. Copied a whole bunch of statements from the SeqCheck to use in the BtReset action as well
BTW: I always use the scratch area to keep some information about variables, events, objects, actions in the CP-file

Secrets of cpQuizInfoAnswerChoice and....


Update: 

New version, taking advantage of features in more recent Captivate releases, has been published under:


Intro

This blog post is again inspired by a user question, this time in the Linkedin Adobe Captivate discussion group.  Here is the question:
"I have 4 simple survey questions in my CP file (5.5). How can I capture the yes/no answers and on another slide lead them down a specific path based on their answers? "
In the past I already answered several questions on forums about storing the user answers in variables so that one is able to create decisions based on those answers, or to show those answers later on. Both goals can be achieved using one Quizzing System variable: cpQuizInfoAnswerChoice.

Example

Play this movie and answer 4 survey questions. Contrary to normal questions, there are not 2 steps, Submit will guide you immediately to the next slide. Based on your answers there is a branching to a Beginner, Intermediate or Expert slide (you'll discover my new garden immigrant on those slides as well). For a first view, I do recommend to show the variables, it is much easier to see what is happening. That is the perfect way to track and debug advanced actions. Have fun.


Variables

The system variable is repopulated after each question. To save the answers, it is necessary to use as many user variables as you have answers to store. Since I have 4 survey questions, I created 4 user variables, labeled v_account (first question), v_hashtag, v_chat, v_devices. Because of the choice to show a text caption with the values of the variables, I created another user variable v_view  that is set to 1 if the user clicks on the button View variables.

Slides, events and actions

The example has ten slides:
  • Slide Intro: with the buttons 'No variables' (goes to next slide) and 'View variables' that triggers an advanced standard action ViewVar, very simple (see Gallery). This slide has the text caption TCVariables with the user variables, but its visibility is turned off.TCVariables  is timed for the rest of the project.

  • Slide Question1: I used the On Enter event of this slide to trigger the advanced conditional action ShowVar (see Gallery) that will show TCVariables if the user choose to. The Else part only has Continue as statement. The Submit button triggers the advanced action Quest1 (see Gallery): it stores the value of cpQuizInfoAnswerChoice in the user variable v_account (corresponding with this slide) and goes to the next slide, thus avoiding the waiting time after the pausing point of the question slide. The answer appears as 'True' or 'False'. 

  • Slide Question2: the On Enter event triggers a conditional advanced action EnterQuest2 (see Gallery); this action checks the answer stored in v_account. If the user has no Twitter account (v_account has the value 'False'), it has no sense to present the other questions because this user is clearly a Starter. That explains the Jump to Starter slide.
    The Submit button triggers the action Quest2 that is similar to Quest2, only the user variable has to be changed from v_account to v_hashtag.

  • Slide Question3/Slide Question4: only the actions Quest3 and Quest4 are triggered by the Survey question (executed when the Submit button is pressed), similar action to Quest1, now with user variables v_chat / v_devices. 

  • Slide Decision: this is a very short slide (0,1sec) that will not have been visible to you when playing the project. It was necessary to create this slide because Question slides cannot have a normal On Exit Event. I used the On Enter event of this short slide to trigger the advanced conditional action Decide that will be explained in next part. 

  • Slide Beginner: I used the On enter event to hide the text caption TCVariables. The Next button jumps to the last slide, End.

  • Slide Intermediate: the text caption is hidden by the conditional action Decide, so no advanced action on this slide, the Next button jumps again to slide End.

  • Slide Expert: similar to the previous slide, Next button now jumps to the next slide.

  • Slide End


Action Decide

This conditional action will branch either to slides Starter, Intermediate or Expert, based on these possibilities for the collected user answers:
  1. If the user answered positively to all survey questions, I considered him to be an expert. It is however not necessary any more to check the user variable v_account. Due to the previous described action EnterQuest2, we are sure that v_account has the value 'true'. That is the reason why the first decision 'Expert' of the conditional action Decide checks only the value of the variables v_hashtag, v_chat and v_devices. If all these variables have the value 'true', the user will be navigated to the slide Expert and the text caption TCVariables will be hidden as you can see in this screenshot. The option 'All conditions are true' has been chosen, hence the AND in the last column.

  2. If the user has answered positively on at least 2 questions, I considered him to be an intermediate Twitter user. For the same reason as explained in 1. I am sure about the value 'true' of v_account. That is the reason why I used the option 'Any of the conditions true' in the second decision 'Intermediate' and checked the same 3 variables. The statements are now again hiding the text caption TCVariables and navigation to the slide Intermediate.
     
  3. If none of those two decisions, conditions result in Yes, only the user variable v_account has the value 'true'. In that case I consider the user still as a starter (he has only created a Twitter account). You do not find a decision for this situation, I just let the play head continue. The slide Decision is just before the slide Beginner, and so the play head will get to that slide automatically. This slide has already the correct setup.
     

More possibilities

It is also possible to store the user answers in the same way as described, and show those answers in a text caption on a summary slide, or use the answers in a feedback or review caption
.


Widgets and Custom Questions - part 3

Intro

 
Finally got to writing this third part about using the included widgets to create custom question slides, in this case Fill-in-the-Blank questions with dropdown lists and a Matching question (but without the dragging possibilities of the default Matching question slide - functionality which is only possible with widgets from InfoSemantics).
 
For dropdown lists, perhaps you'll expect me to use the Dropdown or Combobox widgets, which are very similar in use. But since months, my friend (AS and JS wizard) Jim Leichliter warned me not to use those widgets in production because of serious memory leaks. So, waiting for those issues to be solved, I discovered another widget: Listbox which is not suffering from the same illness. Although the layout possibilities are limited for this widget, it has some nice features which I will try to explain in this post. And we will be ecological again, by reusing variables. This widget is not enhanced, it is not possible to control the choice, the associated variables by advanced actions. That is the reason why Retaking is not possible.
 

Example

 
Play with this small SWF to see a worked out example with 3 question slides: two Fill-in-the-Blank and one matching question. Each question slide has one Listbox widget, used in a different way:
  1. to enter 2 answers at once (use CTRL to select the second item) - I provided partial scoring, 5points for each correct answer
  2. to enter 1 answer, score 5 points
  3. same widget is used for 2 choices and multiple answers possible - only correct/incorrect possible with a score of 15points

Listbox widget - functionalities

The Properties dialog box has not a lot of configuration possibilities as you can see: in the upper field you can type the items for the rolldown list, and the second field is meant for variables. No formatting whatsoever: not for the fonts, not for the colors of fill/border. And as for most widgets, no Help available.

What is the meaning of those variables? After some exploration, can offer you these tips:
  • Similar to other widgets, you have to create those user variables separately (see Using Captivate Widgets - some tips)
  • The variables will store the chosen answer in the sequence they are chosen; you only need variables for the possible correct answers; in the example two answers were correct, so I defined two variables; the first answer chosen by the user will be stored in v_one, the second in v_two.
  • Contrary to other widgets, you can have spaces after the commas for the field with items, the space will be considered however as a first character; for the variables avoid those spaces
  • To make the font bigger, increase the size of the widget. It is a bit of trial and error to find a font that corresponds with other text. Do not worry about keeping the width/height ratio, the font will always keep a correct aspect. The widget bounding box is a lot bigger than the dropdown list itself, as you can see on this screenshot. Once I figured out the proper size, I used the size mentioned in the Transform accordion to change all the widgets to the same size.

Reusing variables
Eating my own dog food (see Be a Captivate Ecologist: reuse Variables) I defined these user variables:
  • v_one, v_two, v_three to be (re-)used as associated variables in the Listbox Widgets on the question slides (used 2 on first questin, 1 on the second and 3 on the last)
  • v_correct1, v_correct2, v_correct3 which will get the correct values on entering question slides 1/2 or based on choice for question slide 3; those are reused variables as well
  • v_q1, v_q2, v_q3 are not reused, but will get the string 'Correct', 'Partially correct' or 'Wrong' for the question slides depending on the user's answer
  • v_region is used on the third question slide, to store the choice for 'Flanders' (value = 1) or 'Wallonia' (value = 2)
  • v_score, v_percent will store the score and percentage to be showed on the score slide.

Advanced actions

First Question Slide:

EnterQuest1: standard action triggered on entering the slide
will assign the correct answers to v_correct1 and v_correct2. This is not necessary for the second question slide where I used a simple action (in the Action accordion) to assign the correct answer to v_correct1. On question slide 3 the assignment will be done with the actions triggered by the click boxes over 'Flanders' and 'Wallonia'.
 
BtSubmit1: conditional action triggered by the button Submit
This action has 4 decisions:
  1. Failure: is a mimicked standard action, will always be true but overridden for partial or correct answers by the subsequent decisions (see screenshot in Gallery); it will show the Next button (initially invisible), Failure1 Text Caption and puts 'Wrong' in the user variable v_q1;
  2. Partial: checks if at least one answer is correct, with an OR combination (see screenshot); it shows Next button, Partial Text Caption, hides the Failure1 caption, adds 5 points to the score and puts 'Partially correct' in the user variable v_q1. If the answer is totally correct, this condition is also true and statements will be executed, but part of them will be overridden by one of the Success decisions. The Next button that was made visible by the Failure statements, will remain visible.
  3. Success1: because the correct answers have no imposed sequence, we need two success decisions (second has v_one and v_two interchanged). This action (see screenshot) checks if both answers are correct, shows the Correct Text Caption, hides the Partial Text Caption, adds another 5points to the score (combined with the previous 5 = 10 points), and puts 'Correct' in the user variable v_q1.
  4. Success2: similar to previous, just switch v_one and v_two in the condition.

Second Question Slide:

This slide has a simple action on Enter to assign the correct value to v_correct1.
 
BtSubmit2: conditional advanced action triggered by the button Submit
This action has 1 THEN - ELSE decision, checks if v_one is equal to v_correct1; think you can figure out what it is doing, similar to the previous Submit action.
 

Third Question Slide:

On this slide, the texts Flanders and Wallonia are covered up with click boxes CB_Flanders and CB_Wallonia. Both trigger a standard advanced action (with same name, which is possible if you have labeled the click boxes first). You have a screenshot of the Flanders action in the Gallery, it is really self-explanatory: assigns the correct values to v_one, v_two, v_three variables, populates v_region, hides the text caption Wallonia and makes the initially invisible Widget visible. For the Wallonia action, an extra statement applies a custom motion effect.
 
BtSubmit3: conditional advanced action triggered by the button Submit.
This action has 7 decisions:
  1. Failure: is a mimicked standard action, totally similar to the one in btSubmit3; it will be overridden by one of the subsequent decisions if the answer is totally correct
  2. till 7. Success1..... Success6: for the same reason I needed to have 2 Success decisions for BtSubmit1, since now 3 items are correct there are 1x2x3 = 6 possible combinations, hence 6 decisions. One of them, Success4 has a screenshot in the Gallery. It is similar to the Success decisions for the first question slide.

Score slide

EnterScore: triggered on entering the slide, to calculate the percentage (see screenshot).
 

Conclusion

Sincerely regret that I couldn't do a comparison with the dropdown and combobox widgets because ot the issues I mentioned. They have better formatting options, but no possibility to select more than one item as I could use with the Listbox widget. And I also regret not to be able to control the content of the variables with an advanced action.
 
Hoping that this new example of reusing variables and of the way conditional actions are executed linearly are useful for someone.


Be a Captivate Ecologist: reuse variables!

Intro

In a former blog post I explained my work flow when preparing advanced actions for a Captivate project: Look Before you Leap. I inserted an explanation of this work flow in the DevLearn presentation as well, and offered a worksheet.
One of the steps is the choice of user variables, and the way you can save a lot of time later on by this choice, more specifically when trying to reuse variables. On the user forums I do see that often users just create variables on the fly and end up with so many variables that they are difficult to manage and cause a lot of unnecessary editing work. I was happy to get a rather simple use case by which I can explain this step another time.
 
Another user, an Emergency Nurse Educator inspired me for this use case, with this question:
"I have developed an MCQ captivate project that presents the emergency nurse with randomised scenarios of patients that they have to assign the correct level of urgency.  The levels of urgency are 1 through to 5, were 1 is the most urgent and 5 the least.  Captivate produces an accuracy %, but I would also like the percentage of over or under assignment of urgency category."

The user provided me with a small example with 3 MCQ slides and allowed me to publish this file here ... on the condition that I offered a solution of course.

 

Example SWF

Play this SWF to see the result. On the score slide the number of incorrect answers that were too high or too low. It is not a percentage - for 3 slides it is a bit ridiculous - but calculating the percentage as well is possible of course.

 

Variables - actions & triggers

No one will doubt that at least one counter is needed, which will be incremented with each incorrect answer. Although I could achieve it with one counter, found it easier to create two:

  • v_low  will store the number of incorrect answers that were under assignment of urgency category
  • v_high  will store the number of incorrect answers that were under assignment of urgency category
If you want to try it with one counter, you'll use the system variables cpQuizInfoTotalCorrectAnswers and cpQuizInfoTotalQuestionsPerProject together with the single counter to calculate the inverse counter. Bit cumbersome, not?
 
To check the answer I have to compare the given answer with the correct answer. The given answer is stored in the system variable cpQuizInfoAnswerChoice. The value will be the 'numbering' of the answer. This means in the default setting assumed here, where answers are indicated by characters A, B, C, D, E it is the character that will be stored. This is great news, because operators like 'is greater then' can be used to check if the answer was 'higher' than the correct one.
 
As I explained in the  DevLearn Presentation you have two possible actions on exiting a question slide:
  1. one that will be executed after a correct answer; in this case this can be left at Continue or eventually Go to Next Slide
  2. one that will be done after last attempt (on question level) for a wrong answer, which we will have to turn into an advanced conditional action
Since the wrong answers can only be too high or too low, this advanced action can be limited to one decision:
  • either the answer was too high, then the v_high counter has to be incremented, will be the THEN part
  • or it was too low and the v_low counter increments, the ELSE part
The most annoying work when using advanced actions is to duplicate and edit similar actions, because of the need to point to a unique ID. In this use case: the correct answer is different on each Question. At first sight I couldI create the advanced action for the first question slide this way:
IF cpQuizInfoAnswerChoice is greater than B       (B is the correct answer)
THEN   Expression  v_high = v_high + 1
ELSE    Expression v_low = v_low + 1
In that case I have to create a similar advanced action for each Question slide, in which I have to change the correct answer indicator. To avoid this cumbersome work, I created a reusable variable v_correct. This variable will get the correct answer indicator (B for the first question slide) on entering that slide, by a simple Assign action.
 
And the advanced action will be changed to:
IF cpQuizInfoAnswerChoice is greater than v_correct
THEN   Expression  v_high = v_high + 1
ELSE    Expression v_low = v_low + 1 
And this unique advanced action can now be used on any question slide!
 
 

More tips to save time

I would recommend creating a template with one question slide and the score slide. The question slide can have a regular question instead of a placeholder. Attach both the assignment action (on Enter) and the advanced action (After last attempt) to this question slide.

When using this template: duplicate the question slide as many times as needed. They will all have the same Text Captions, that you can export, edit and import again to change the question texts. In Captivate indicate the correct answer, and at the same time assign the correct answer indicator in the Properties panel for the slide, On Enter.
 

 

Using Captivate Widgets? Some tips

Intro

Captivate comes with several widgets that you can use freely. Some of those widgets are really easy to use and to configure, but I have to confess that sometimes I had to curse quite a while before discovering some functionalities of the Widget Properties dialog box. Because there is no explanation available at all. This small article is meant to offer you some tips and warnings. Some of those tips have already appeared in other postings, where I used widgets.

General tips

Duplicating widgets

Some widgets do need a lot of editing (formatting), but if the widget has an associated variable do not copy it to save time, because the copies mostly will cause issues.

Multiple widgets on one slide

You can use multiple widgets on one slide, but be careful when stacking interactive widgets that are in the same location on the slide! This can lead to unpredictable results, same as with interactive objects on the same place. 

Interactive widgets

Those widgets can have a score (eventually to be reported to a LMS) and perform actions on Success and on Failure like other interactive objects (button, TEB, Click box).  They will appear in the Advanced Interaction view (F9). Of course that is also the case for the Question widgets (only one available in the Captivate box).

Master slides and widgets

You can only add static widgets to master slides, no interactive nor question widgets. The static button widget can be very useful on master slides until it will be possible to add regular buttons.

Specific tips

Widgets with associated user variables

 Several widgets have associated user variables, which can be used later on to display in Text Captions, or in advanced actions. Examples are CheckBoxes, DropDown, RadioButtons, TextArea, Timer... 
  • You have to create those user variables separately, using the Project, Variables dialog box; and like all variables they are case sensitive
  • If you have to enter more than one variable in the Properties (ListBox, ComboBox, DropDown,..) they have to be separated by commas but you do not enter a space before/after the comma or only the first variable will be accepted
  • If you have to enter more than one value, same rule: no spaces after or before the comma separator

Preview area

To me this is a misleading name because I expect such an area to be read-only which is not the case: for some widgets you have to edit in this preview area! Some examples, just to push you at exploring that Preview area in case you want to change something that is not available elsewhere in the Properties Dialog box:

  • ArrowWidget: you can use the preview area to resize the arrow and to move the text
     
  • StaticButton: use the Preview area to resize the button, and to make place for more letters in the Text. Be careful with the text resizing: if you resize using the corner handles or the handles on the horizontal borders you'll resize the font as well, just use the handles on the vertical borders. 

  • If you want to use a customized image, it will by default be placed to the right side of the button.
    You have to cover up the button with that image if you only want the image to be visible. Do not use transparency in the image and be sure to copy it to the folder where you will put the published file. Moreover this image will be not visible when previewing, only after publishing! 

I expected a similar behavior for the InteractiveButton widget as for the StaticButton. I do not remember ever using this button and checked it out. It seems to be buggy, the caption doesn't appear in the Properties dialog box, which makes it very difficult to adapt the size of the text. I'm not sure if this is also the case for other users, didn't read any question about this widget on the forums so far.

Question Question Slides - Part 2

Intro

A couple of weeks ago I tried to compile all the ideas about default Quiz functionalities and tweak possibilities in a blog post: Question Question Slides in Captivate.
From a recent thread on the user forum (Quiz Results Text Styling Problem), I concluded that something was missing: 'How to tweak the Review message on the Score slide?' There is an important bug in CP5.5 concerning that review message: it is limited to 'oneliners', you cannot put a long text in it, it will not wrap, you do not have a Format accordion in its Properties Panel neither.
Thanks, Miguel, for pointing out this gap that I will try to fill up now. If you did not know it yet, I have learned about everything concerning Captivate spending time on the user forums, questioning, answering and discussing.
This post will use the same example Quiz explained in this blog post about customizing the review messages on the Question slides: Customizing review messages. Whereas that post explained the work flow both for Captivate 5 and 5.5, here I will focus only on 5.5. However the work flow will be very similar for the previous version.
Update 6.1: in this version, only available for subscribers and ASA, finally the Review message will wrap.
 

Demo

Watch this sample SWF to see the result of the tweaking: if you compare with the previous version about Customizing review messages, you'll see that there is a Retake option (you have 1 attempt on Question level but 3 attempts on Quiz level) and that the review messages on the score slide are customized. The Review button is covered up by the Retake button (explained in the first part of Question Question slides), so it will only be visible when you have exhausted the attempts. I did not provide a review message for the question slides when you didn't answer the question (completely). Reason: you need to use the default Review area in that case. You can adapt the text style but not the caption style itself. It should be possible with more complicated advanced actions and user variables however, adding a third Text Caption and keeping track of non-answered questions.
 
 

Work Flow

Question Slides

I reused the work flow described in Customizing review messages
  • I created Text Captions OKx and NOKx for each question slide and set them initially to invisible
  • Created advanced actions Correctx and NotCorrectx to be triggered On Success/Last Attempt (Quiz Properties) that show the right text caption and jump to next slide, to avoid that the user sees this caption immediately
However, this time 3 attempts on Quiz level are available, the user can retake the quiz if he fails. During Retake he should not see the text captions (OKx, NOKx) that were set to be visible in the previous attempt. This is a new 'situation'. When entering a question slide a user can be in Retake or in Review situation, which means we'll need an advanced action to be triggered On Enter Slide. Retake only happens
  1. if the user has failed on a previous attempt (system variable cpQuizInfoPassFail will have the value=0) AND
  2. If the attempts are not exhausted
You will be tempted to use the system variable cpQuizInfoAttempts to track the number of attempts, but I couldn't find a proper solution using that var: it will be updated when an attempt starts. It will never be greater than the maximum allowed number of attempts, so I cannot use a condition like 'IF cpQuizInfoAttempts is greater than 3' to check if the attempts are exhausted. For this reason I created a user variable v_attempts that is incremented on entering the first question slide. Once this variable exceeds 3, I know that the user is in Review mode, not in Retake mode.
 
I created an advanced action EnterQx to be triggered on entering each question slide. It is a conditional action with two decisions for all question slides except the first one. For the first question slide there is first a mimicked standard action as a first decision. You'll find all decisions for the first question slide in the Gallery:
  • Decision Increment
  • Decision Retaking? checks if atttempts are not exhausted and user has failed in previous attempts and in that case hides the text captions
  • Decision Reviewing? checks if the user has Passed OR has exhausted his attempts and in that case just continues, which means that the correct text caption remains visible

Score Slide

To have a customized Review message, I cleared the default Review Messages, but left the placeholder object partially on the stage (made it really small).
I created three Text Captions: SuccessScore, FailScore, ReviewScore, set initially to invisible.
Review and Retake button were aligned with the option 'Align and resize to the same size', which results in the Review button being covered by the Retake button until the allowed attempts on Quiz level are exhausted.
On Entering the Score slide an advanced action EntScore is triggered (see Gallery). This action is conditional and has 3 decisions:
  • Decision Passed: checking cpQuizInfoPassFail will show Text Caption SuccessScore; the Review button will appear automatically (functionality of Quiz)
  • Decision Retake?: checking both cpQuizInfoPassFail and cpQuizInfoAttempts to show the Text Caption FailScore
  • Decision Review?: to show the Text Caption ReviewScore if user failed and exhausted attempts

Other gaps?

Please, post a comment if you are finding other gaps in my Question slides overview!
 

 

Presentation DevLearn 2011

Exactly two weeks ago I enjoyed presenting a session at DevLearn 2011 about Advanced actions in Adobe Captivate with Vish (Viswanath Shivaswamy). I promised to publish the presentation for those who were not able to attend. As you all know, a lot of work is waiting when you return from a conference, so it took me a while to adapt the presentation and to add voice overs. Today I'm happy to be able to publish at last. Just hope that you will be patient while the pretty big file (15MB) is downloading. In the near future I will try to rescale and adapt for publishing on YouTube as well, in different movies.
 
I included a Table of Content in Overlay where you can navigate to your wish. In the real session we also gave some demonstrations in Captivate itself, but I had to leave those out of the SWF.  Please, hope you will post some comments.