One of the cool things about Adobe Captivate is that you can actually develop more complex interactions using the Advanced Actions feature. This post is for users with a fair amount of experience in Captivate and it presumes Continue reading…
Posts in Category "Under the hood"
Recently there was a unique quiz usecase discussed on our Facebook page, where the trainer wanted to create a slightly different compliance or mandatory training course. The requirement was that for each question, the answer selected by the participant in the first attempt would be used for scoring. But they also wanted to ensure that the participant moved to question #2 only after answering question #1 right, and so on.
Here is a 3 question quiz that highlights this usecase (I’ve left the progress indicator ON to highlight the jump from question 1 of 6 to question 3 of 6, etc.): Continue reading…
We had an awesome session featuring amazing contributions from Jayashree who handles the Captivate LMS integration and was an incredible source of information during the session. Also helping out were Continue reading…
I assume by now most of Adobe Captivate 5 users already know how to create a style and use them in project.
Did you ever wished that “some particular styles” were available in all the new project that you create? Or did you ever feel that after creating new project, the default/predefined set of styles that Continue reading…
AICC enabled LMS allows SCO’s to reside on different server i.e. CMS, File server etc. When the Captivate course and LMS are in different domains and when user tries to access the course from LMS it hangs at the loading screen
Adobe Captivate does not construct the required URLs correctly when the course and LMS are in different domains. Same domain no issues have been reported, course which resides in LMS also has no issues. The fix is specific to cross domain AICC
Solution: Continue reading…
The Adobe Captivate, Presenter and eLearning Suite Product Management team will meet with customers in the US during the weeks of March 21 and March 28. These are amazing opportunities to participate Continue reading…
Further to Shameer’s post on “Publish to iPhone from Captivate and eLearning Suite“, here are the next steps to generate the iPhone app. from your Captivate SWF.
These are manual steps and you need to use the terminal/shell to execute the command on a Mac machine where you have your Apple Developer Certificate and Provisioning Profile installed: Continue reading…
Over the last few months, a few users have reported that they have observed an audio cut in the published output of their Captivate projects. This can happen when a continuous audio* is present on all slides of the project and also in the case of discontinuous audio^. If you have observed this issue in your published projects and this is happening even after installing the patch, don’t worry, here are three simple steps you have to follow to get rid of this problem.
Install Adobe Captivate patch from here: http://www.adobe.com/support/captivate/downloads.html
You can also initiate the update process from the application by navigating to Help >> Updates. This will bring up the Adobe Update manager and list the updates available for Captivate.
Read the release notes for the patch here: http://kb2.adobe.com/cps/881/cpsid_88142.html. Follow the instructions mentioned in the “Using the AudioOptions.ini file to obtain the fix for the audio issue” section in the release notes to place the “AudioOptions.ini” file in the Installed folder of Captivate.
Step1 can be skipped if you have already installed the patch. Captivate build number after installing the patch should be 126.96.36.1994
Now launch Captivate and open the project which has Audio cut issue. Select all the slides in the project. (Select the first slide and Shift+Select the last slide). In the Slide PI change the “Slide Exit” action from “Go to Next slide” to “No Action”
In the “Publish dialog” tick in the check box “Force re-publish all the slides” and then Publish.
Now the published output should play entire audio present on slides and no audio cut issues should be seen.
* Continuous audio – Audio, with duration equal to slide timing, present on all the slides of the project
^ Discontinuous audio – Audio present only on certain slides of the project
Captivate playbar swfs have a complicated structure. Though you can create a playbar from scratch, its advisable to duplicate an existing playbar FLA file and make changes in it to suit your needs. You can find the source FLA files for the canned playbars in the following location:
<Adobe Captivate Installed Directory>\Templates\PlaybackFLA\AS3
Height of the playbar:
To change the height of the playbar, adjust the height of pbcBk_mc movie clip inside cpPlaybar symbol in Library. Also to get correct height, you need to change the height of the shape present in pbcBkHeight symbol in Library. pbcBkHeight symbol should contain a single shape (without stroke) and its height should equal to that of the background height set in pbcBk_mc.
Each playbar button except slider should follow this structure:
- icon_mc – A movie clip on which Button Icon color will be applied
- btn_mc – Each btn_mc movie clip should follow this structure:
- color_mc – A movie clip on which Button Face color will be applied
- glow_mc – A movie clip on which Button Glow color will be applied
- mouse states – Need frames with these labels – up, down, rollover. Whenever a mouse up event (or normal state) occurs on this playbar button, it will be asked to jump to the frame with label “up”. Similarly for “down” and “rollover” frames when mouse down and mouse over events occur respectively.
- actions – A layer with action script in its first frame. It should have the following actions:
- btnTipsId – a variable which specifies the index of the tooltip array to be picked up when mouse is hovered over the playbar button [More about this array in Tooltips section below]
- onClicked – A function which calls parent.onPBCBtnClick() with a valid action. These are the list of valid actions – “rewind”, “back”, “play”, “pause”, “forward”, “cc”, “audioOn”, “audioOff”, “exit”, “info”, “TOC”, “FastForward”, “FastForward1″, “FastForward2″ and “print”. – Based on the functionality of the button you need to give appropriate name.
Slider should have the following structure:
- thumbBase_mc –background movie clip of the slider (Button Face color)
- proClr_mc – a movie clip to show the completed progress of the movie (Button Glow color)
- thumb_mc – a movie clip which indicates the play head (Button Icon color)
- actions – mouse up and mouse down listeners which will call parent.onSliderMouse(false) on mouse up and parent.onSliderMouse(true) on mouse down.
All the colors (Button Icon, Button Face, Button Glow) can be applied in Captivate Skin Editor. Background color in Skin Editor will be applied to the movie clip named pbcBk_mc inside cpPlaybar symbol.
Playbar movie clip is the movie clip which contains all the playbar buttons, background movie clip and a background height movie clip. It should have the following movie clips (specified below are instance names):
- pbcBk_mc – Background movie clip
- pbcRewind_mc – Rewind
- pbcPause_mc – Pause
- pbcPlay_mc – Play
- pbcBack_mc – Backward
- pbcForward_mc – Forward
- pbcFF_mc, pbcFF1_mc, pbcFF2_mc – Fast Forward
- pbcSlider_mc – Slider
- pbcAudioOff_mc – Audio Off
- pbcAudioOn_mc – Audio On
- pbcTOC_mc – Table of Contents
- pbcCC_mc – Closed Captioning
- pbcExit_mc – Exit
- pbcInfo_mc – Info
- pbcPrint_mc – Print
- pbcBkHeight_mc – a movie clip to determine the height of the playbar [See Height of the playbar section for more details]
pbcBk_mc and pbcBkHeight_mc should be placed compulsorily. The rest of them are optional. However if all of them are present, user can choose either to have/not have them from Skin Editor.
pbcPlay_mc and pbcPause_mc are mutually exclusive at runtime. Only one of them can be visible. Similarly pbcAudioOn_mc and pbcAudioOff_mc are mutually exclusive.
Finally place the playbar movie clip on the main timeline with the instance name as pbcBar_mc. You can have an optional auto play button placed on the main timeline with the instance name autoPlay_mc.
To change the tooltips, find the MovieClip named Localization in the library. Open this symbol and go to its Frame 1. Here you can find the tooltips for the playbar buttons. Change them based on the requirement. Apply caution while changing the tooltips. Changing the order of the array elements will result in incorrect tooltips. If you want to change the language of the playbar, assign the appropriate array variable to pbcBtnTips variable. btnTipsId variable inside playbar buttons refer to the index in this array (pbcBtnTips).
Reordering Playbar buttons:
Playbar buttons will always be placed in the following order:
There is no direct way in which you can change this order.
Auto Reordering trick: However you can change atleast the order/layout of some of the buttons in this way: Renaming the instance names of pbcRewind_mc as pbcExit_mc and vice versa will swap the position of Rewind and Exit buttons.
However you might not be able to do this for every button because of some linking buttons play/pause, audio on/off and Fast Forward buttons.
Manual Reordering trick: If you want to hard code the positioning values, you can do so by adding an event like OnEnterFrame in background movieclip and then set the values for the button positions.
The code below will move positions for either Top or Bottom stretched. If you are using the playbar positioned on either side then you can change the x to y and play about with the values until the buttons are in the position you want. You need to check the registration point of the buttons and accordingly adjust the x and y positions.
Open the desired skin template FLA and open the symbol pbcBarBkColor in the library and add the following script in its first frame.
I’m also attaching a couple of sample playbars where the ordering is changed.
If you have created a new playbar swf, you need to place it in the following location for Captivate to pick it up:
<Adobe Captivate Installed Directory>\<lang>\Gallery\Playbars\AS3
Just close the Skin Editor if it is already open and open it again. You can check your new playbar in the playbar drop down.
Adobe Captivate customers have always been very active on the forums. It has been a great place to interact with customers, resolve their issues and learn more from them. Recently our customer Paul Thrippleton raised a CPTX file size bloating issue in forums. Thanks Paul for raising the issue. We worked on it and have found out that the issue is seen because of the audio files (.wav and .mp3 files). Although we will be surely fixing it in the next release, the good news is we have an easy workaround to overcome the problem.
Let me first explain the problem:
One of the ways to insert audio file in Captivate, is to insert it on slide and using the “Audio Split Options” dialog, spread it across another slides.
Insert an audio file on slide or directly in library. Then duplicate the audio file in library
Insert an audio file on slide or directly in library. Then “Update” the audio file in library.
In above scenarios the file size of the CPTX file increases more than normal. This issue is not noticed if the audio files are smaller in file size because then the increase in CPTX file size too will be not so noticeable.
Note: This issue happens only if you have inserted audio in Captivate and performing any of the above scenarios without editing the audio file.
We have a simple workaround to the problem.
-Once the audio is inserted into the Captivate project, go to library.
- Right click the audio file and select “Edit with Captivate”
- Make a minute modification in audio file waveform. (Delete small portion of audio) and save the changes.
Now you can apply any of the scenarios mentioned above and they will work without increasing the CPTX file size.
- This issue is not noticeable when audio files are of smaller sizes.
- This issue affects only the CPTX file size and cannot affect SWF file size.
- Issue is seen only if you perform above scenarios using an unedited imported audio file.
- This issue is only in Captivate 5 and not in any other releases of Adobe Captivate.
Have you ever used Adobe Captivate widgets? Widgets can enhance the type of content you can create with Adobe Captivate. You can leverage the complete capabilities of Adobe Flash via widgets. Once created, widgets can be used any number of times just like any other Captivate object. This really helps in creating engaging rapid elearning content. Captivate ships with a number of useful widgets. Captivate widgets are basically swf files which follow certain rules. One rule being (the blog is about this rule), the widget swf should register certain callbacks via External Interface. These callbacks should be made in the first frame of the swf.
Most of the widgets created for Captivate are Adobe Flash based widgets. Creating widgets using Adobe Flex/Flash builder is a little tricky. But once you get to know that, creating really powerful widgets takes no time. With Flex, you can leverage the vast set of inbuilt components which are powered by Flex framework to create rich and engaging Captivate widgets.
If you had ever tried creating a Captivate widget in Flex, I guess most of you wouldn’t have succeeded. You might have tried adding the External Interface callbacks either in applicationComplete or creationComplete handlers of the Application class in Flex. This method doesn’t work because Flex creates the Application in its second frame, where as Captivate expects the callbacks to be added in the first frame.
So, here we are providing a hassle free way to create Flex based widgets for Captivate. Follow these four simple steps and you can create your Flex based Captivate widgets in no time.
Step 1: Include the two ActionScript files provided below, in your Flex project.
Step 2: In your main mxml file, Change the mxml application start tag from
<s:Application to <cp_widget:CPWidgetApplicationBase xmlns:cp_widget="*"
And the end tag from
</s:Application> to </cp_widget:CPWidgetApplicationBase>
Step 3: Open CPWidgetSystemManagerBase.as and set the properties marked in TO BE SET BY WIDGET DEVELOPER section, according to your requirement.
- Set this to true, if you are overriding IsReadyForSnapShot function in your main application, else keep it false
- mWidgetType :
- To create a static widget, set mWidgetType to 0
- To create an interactive widget, set mWidgetType to 1
- To create a question widget, set mWidgetType to 2
- If you want a specific Edit Mode width, set this parameter, else set it to -1
- If you want a specific Edit Mode height, set this parameter, else set it to -1
Step 4: Override the widget specific methods provided in CPWidgetApplicationBase.as file in your main mxml file. For example, if you are trying to create a static widget, add these methods in your main mxml file and build the logic.
- override public function getInspectorParameters():Object
- override public function setInspectorParameters(inParam:Object):void
- override public function setParameters(inParam:Object):void
- override public function cpSetValue(inVariable:String, inValue):void
- override public function IsReadyForSnapShot():Boolean
Overriding all the functions is not a must. Choose which functionality you want in your widget and proceed accordingly.
That’s it!! It’s not difficult at all.
Optionally, if you want to mute further calls from Captivate, which might be required when you do state changes in Flex, call setCanDelegateCall(false) in your application class. When you want to unmute, call setCanDelegateCall(true).
If you are using mx:application, then you need to do these changes in CPWidgetApplicationBase.as: Uncomment, Import mx.core.Application; and comment out import spark.components.Application;
In case you are having issues with getting the flex widget to work, you need to merge the Flex framework into the swf. To do so, Goto Project > Properties > Flex Build Path > Library Path > Select the Flex SDK and choose ‘Merged into Code’ as the linkage type.
Provided below are sample flex based widgets for Adobe Captivate 5 created in Flex along with the source.
MyFlexWidget is a static widget, which displays whatever is entered into it in widget properties.
MyInteractiveWidget is an interactive widget; you can select which button is the correct one among the given two, and that one will act as the correct answer
MyQuestionWidget is a question widget; which has similar functionality as that of the interactive widget.
Try them for yourself!
Update: To compile the samples, you need to update the class path.To update the path, Goto Project > Properties > Flex Build Path > Source Path > Edit.
Just update the path to the following.
[Adobe Captivate Installation Directory]\ActionScript\export\as3
[Adobe Captivate Installation Directory] is the directory where captivate is installed. Typically it will be C:\Program Files\Adobe\Adobe Captivate 5
Many trainers start their eLearning content authoring from MSPowerPoint. And then use tools like Adobe Captivate or Adobe Presenter to covert these PPTs into elearning courses. Captivate automatically adds click based navigation to progress from one slide to another when you import a PPT slide deck into Captivate. But some of us prefer to provide something more fancy, with custom navigation buttons to move back or advance forward thru an imported PPT slide deck. A popular way to do this is to add text buttons or click boxes using Captivate.
Now if your PPT slide deck had custom animations that advanced based on a mouse click (or keyboard shortcut), this tends to interfere with the Captivate navigation buttons added to the same slide. If the ‘on success action’ for your Captivate button is set ‘Continue’, it doesn’t go to the next slide all the time. If you set it to ‘go to the Next Slide’, it then skips the PPT animations on that slide.
This problem can be resolved using this workaround:
1. When importing the PPT slide deck, choose -> ‘advance slides automatically’.
2. Insert text buttons on the slides that require navigation. Label them appropriately as ‘Next’ or ‘Previous’.
3. Set the ‘on success action’ for the ‘Previous’ button to ‘go to the previous slide’.
4. Choose ‘execute advanced action’ as the on-success action for the ‘Next’ button.
5. Create an advanced action with only “Continue” as the action in it and attach it to “Next” button as sown below
This now ensures that all PPT animations are triggered one after the other based on the user click (or a chosen shortcut key-like ‘enter’). Also, like the original PPT flow, the user navigates to the next slide on clicking the ‘Next’ button after all the animations on the current slide are completed.