How to analyze Captivate Movie structure
If you want to create widgets that control Captivate files with new functions, other than the standard playbar functions, you will need to develop them in flash. Here’s how to figure out what is going on in a Captivate movie file:
Create a Captivate movie, and publish it (Captivate 2) or export it to Flash (Captivate 3). To create my faster-slower widgets, I had to decompile it into an .fla (I used SWFdecompiler )
Open it in Flash, and start exploring the structure. If you are using version 3, by far the best tool you can use include the “debug movie” command.
If you are working on an earlier version of Captivate the debug movie function is still helpful, but not quite as great, so I used this simple method for determining where things are:
In the first frame of the .fla, put a script that traces out the properties of _root. Then find the object that most likely contains whatever you are trying to determine the path to, and trace the properties of THAT object and so on. Keep working down until you find the path to the object.
So, for example, tracing from the playbar,
for (var i in playbar_mc) {
trace(“playbar_mc.”+i+” = “+playbar_mc[i]);
}
it output something like:
rdPlaybar>>> cpMovie = _level0.s1_i3_swf_mc.m_swf_mc this._name= playbar_mc _parent._name= m_swf_mc _parent._parent._parent._name= _parent._parent._parent.cpMovie._name= undefined cpMovie.name= m_swf_mc _root.rdcmndRewindAndPlay = 0 _root.rdcmndRewindAndStop = 0 _root._accProps = [object Object] _root.endSwfAction = 0 _root.m_Sub_mc_array = s1_i3_swf_mc _root.slideData = [object Object] _root.slideTransition = [object Object] _root.index = 12 _root.pacemaker = [object Object] _root._captivateMovie = [object Object] _root.rdcmndGotoFrameAndResume = -1 _root.movie = [object Object] _root.toberemoved = [type Function] _root.getSlideIndexFromFrame = [type Function] _root.itemLoaded = [type Function] _root.onEnterFrame = [type Function] _root.waitCount = 0 _root.menu = [object Object] _root.CaptivateVersion = 2.0.0 _root.rdcmndMute = 0 _root.rdcmndCC = 0 _root.rdcmndNext = 0 _root.rdcmndPrevious = 0 _root.rdcmndPause = 0 _root.rdcmndResume = 0 _root.rdcmndGotoFrame = -1 _root.rdIsStandalone = false _root.rdIsPreview = 0 _root.rdIsMainMovie = 1 _root.rdinfoSlideCount = 12 _root.rdinfoCurrentSlideInProject = 1 _root.rdinfoCurrentSlide = 1 _root.rdinfoCurrentFrame = 1420 _root.rdinfocurrFrame = 1414 _root.rdinfoFPS = 30 _root.rdinfoSlidesInProject = 12 _root.rdinfoFrameCount = 2565 _root.rdinfoHasPlaybar = 0 _root.adobeHomeMenuItemHandler = [type Function] _root.createCpContextMenu = [type Function] _root.isExpired = [type Function] _root.setExpired = [type Function] _root.decrementWait = [type Function] _root.incrementWait = [type Function] _root.isWaiting = [type Function] _root.$version = WIN 8,0,22,0 _root.s1_i3_swf_mc = _level0.s1_i3_swf_mc _root.loading_mc = _level0.loading_mc _root.slide11__image_mc = _level0.slide11__image_mc _root.rdClibBoxSound_mc = _level0.rdClibBoxSound_mc _root.rdClibBoxSound_mc = _level0.rdClibBoxSound_mc _root.slide10__image_mc = _level0.slide10__image_mc _root.slide9__image_mc = _level0.slide9__image_mc _root.slide8__image_mc = _level0.slide8__image_mc _root.rdClibBoxSound_mc = _level0.rdClibBoxSound_mc _root.slide7__image_mc = _level0.slide7__image_mc _root.slide6__image_mc = _level0.slide6__image_mc _root.slide5__image_mc = _level0.slide5__image_mc _root.slide4__image_mc = _level0.slide4__image_mc _root.slide3__image_mc = _level0.slide3__image_mc _root.slide2__image_mc = _level0.slide2__image_mc _root.slide1__image_mc = _level0.slide1__image_mc _root.slide0__image_mc = _level0.slide0__image_mc _root.rdClibBoxSound_mc = _level0.rdClibBoxSound_mc _root.rdClickHandler_mc = _level0.rdClickHandler_mc
for (var i in _root.captivateSlides) {
trace(“_root.captivateSlides”+i+” = “+_root.captivateSlides[i]);
}
Other very helpful sites with lists of captivate variables, widgets and other tips:
- http://www.RaisingAimee.co.uk
in particular: - Captivate Variables
- Extending Captivate Projects with Variables
Also the Adobe help files for Captivate and Flash are good, search them carefully. All this is in the manual:
Another trick is to use xray, to scan the structure of a captivate movie. Make a dummy swf adding xray component to it, then include that swf on a slide of the exported captivate swf. Then you can connect and rummage around with xray.
You can also find out quite a lot of information about how Captivate works by reading through the doco for the WidgetFactory API created by Tristan the Widget King.
His blog is at: http://www.infosemantics.com.au/widgetking/
and the API doco is at:
http://www.infosemantics.com.au/widgetfactory/doco/index.html
—–