How to analyze Captivate Movie structure
January 30, 2008
Tutorials | Captivate | Flash | Web Building

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.


Ads by Google

Posted by ellen at January 30, 2008 08:32 PM


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:

Also the Adobe help files for Captivate and Flash are good, search them carefully. All this is in the manual:


Ads by Google

2 Comments

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


Ads by Google

 RSS   |   Contact Me


Ads by Google