Hacking the Flash CS4 Motion Model to Create New Extensions

Justin | ExtendScript,Flash,jsfl,Misc,tips,Tutorials | Wednesday, March 4th, 2009

Here’s a quote from an email I sent to Chris Georgenes and David Stiller on 9/29/08 about an extension idea that I had using the new motion tweens in Flash CS4 (before I’d even used the application):

Given that the new motion tween creates a bezier path, I’m guessing that we’ll have access to creating such a path with JSFL. Which led me to think about creating that path in real-time, similar to the real-time drawing that I’d seen from ScribbleBot on Chris’s blog. Instead of scribbling a line in real-time, I’d be sketching a motion path. There would be a variable to determine “smoothness” so that it doesn’t create an unmananageable amount of new motion keyframes. And it could probably be done with a custom tool rather than a panel, so that the sketching could be done directly on the stage.

That also leads me to wonder if there’s a way to record the armature animation in real-time and convert it to a motion tween, similar to the feature that already exists in After Effects CS3.

I know, I’m a nerd. The first idea there became MotionSketch. I haven’t yet found a way to accomplish the second idea with the armature, but I have a few ideas.

Prior to the release of Flash CS4, I had gotten a little hooked on creating Flash extensions. It’s quite easy to create a classic motion tween with JSFL (Flash Javascript), you can simply make the following call: timeline.createMotionTween(). It was likely that createMotionTween() would remain for legacy support even though the name of the tween had changed from “motion” to “classic.” I’d seen all of the great new motion features demonstrated online, and I expected there might be an equivalent call for a new motion tween. When Lee Brimelow linked to the CS4 documentation, I went right to the Extending Flash section to see what had been added. I didn’t see any additions for the motion features, but I had also previously seen Lee’s post on Flash Camp in San Francisco. Fortunately, I live close to San Francisco and I decided to head over try out the application early, and maybe get a chance to talk with some of the Flash team about any undocumented features.

While at Flash Camp, I spoke with Richard Galvan and he directed me to John Mayhew, the engineer behind the new motion model in Flash. John was very affable and willing to follow up with me, but he didn’t know of any undocumented features offhand. Unfortunately, adding features to the JSFL API is usually somewhat of an afterthought because so much of the development time is spent on the new features themselves. I had a few ideas to use the new 3D features while at Flash Camp as well, but they were similarly left out of the JSFL API.

So I let those ideas go for awhile and focused on a different extension as my Flash Camp project. A few weeks later, I got a little antsy and I starting digging around in the Flash configuration directory for clues. I noticed two files in the Javascript directory named MotionXML.jsfl and MotionClipboard.xml. I started looking around in the JSFL file for undocumented commands that I could use, but to little avail. I think I even put some trace calls into the JSFL to spit out info when copying motion from the Flash IDE. I noticed that even though copying and pasting a new motion tween appeared to work the same way in the Flash interface as copying and pasting a classic tween, a new motion tween was not triggering the calls in the JSFL file. Looking at the XML file, I found that even though copying a motion tween wasn’t using the same JSFL calls, it was saving XML to the same file…just different XML. The classic tweens were generating XML with a root tag of <Motion> and the new tweens were generating a root tag of <AnimationCore>.

Flash seemed to be able to discern which type of motion it was copying or pasting and acting accordingly. So it occurred to me that I could grab the data from the motion clipboard and alter it before pasting it back. Additionally, if I wanted data from an existing tween, I could run a Copy Motion command, available to JSFL as of Flash CS3 thanks to Robert Penner’s Copy Motion feature, then go about altering and pasting. These are the extensions that I’ve created thus far using that very technique:

Below is a rundown of the steps I used in the extensions mentioned above. This technique can be used in lieu of the non-existent timeline.createMotionObjectTween() command. I refer to this as a “hack” because it’s an unsupported method, but given the complexity of what can be created with this new motion model, editing the XML is actually a fairly efficient way to go about creating/editing a tween. If the XML is not properly formed, it can cause Flash to crash when you try to paste the motion, or it can create some funky bugs in the Motion Editor. Be sure to test your code thoroughly before releasing anything for public consumption. The language is JSFL (used to automate and manipulate the Flash authoring environment). There’s a link to documentation for the AnimationCore XML listed in step 3.


New Flash Extension: MotionBlur

Justin | animation,extensions,Flash | Monday, March 2nd, 2009

The MotionBlur Flash extension takes a (new) motion tween, analyzes the movement, and creates a motion blur. Because the new motion model allows each property on a tween to be set independently, this extension is able to generate independent blurring for horizontal (x) and vertical (y) movement. It can take into account some rotation as well as some movement on the z-plane (3D), but its primarily designed to track x and y motion.

It works best if you run the extension after you’ve completed all easing and other adjustments on the tween first. If have to you adjust your path or motion easing, you can simply run the MotionBlur command again to re-calibrate.

The motion curves for blur x and blur y are optimized as well, so they add as few new keyframes to your tween as possible. The amount of blur is also adjusted based on the document’s frame rate (higher frame rate = faster animation = more blur).

(For CS4-CS6)

(For Flash Pro CC)

The Missing Flash Panel: EaseCaddy

Justin | animation,extensions,Flash | Thursday, February 26th, 2009

Along with the brilliant new tweening model in Flash CS4, the Flash team has given us the powerful, but somewhat daunting, Motion Editor panel. The Motion Editor panel allows for extremely precise control of each individual animation property as well as custom easing curves. Put simply, the upshot of the Motion Editor is control and precision, the downside is time and complexity. One area where a lot of time can be lost is in recreating custom eases. A custom ease cannot be transferred from one tween to another (UPDATE: you can copy/paste curves in the motion editor–a great feature that I somehow missed. See comments for details. Thanks, Eric!). Custom eases can be cumbersome to transfer eases across tweens and across files. And I’ll go out on a limb here, there was no way to transfer an ease from a classic tween to a motion tween or vice versa…that is, until EaseCaddy.

Video demos

I should clarify somewhat. The Motion Presets panel that comes with CS4 is a great way to store and quickly apply entire animations that include easing. In fact, I modeled the visual design and functionality of EaseCaddy on the Motion Presets panel. But what if you want to apply an ease from a motion preset, but not overwrite your existing animation? Or apply the effect to a different property? Hence I’ve titled this post, “The Missing Flash Panel.”

The EaseCaddy panel allows you to store your custom eases and re-apply them. You can save your eases to a file and send them to someone else. You can save both classic (pre-CS4 motion tween) eases and object (new motion tween, as of CS4) eases, and apply one to the other. So you can even save eases from your Flash CS4 Motion Editor panel and send them to someone who has Flash CS3, or open up old files and reuse your classic tween eases on the new motion tweens. EaseCaddy will translate them for you. The panel is sortable by column, and has a filter field, in case you collect a large number of eases. Eases within the panel can be renamed by simply double-clicking on their names. There’s an adjustable preview at the top gives an approximation of the easing curve. I used Singularity’s FastBezier Actionscript class to draw quadratic bezier curves from the cubic curve data (explanation here).

When applying a stored ease to a new motion tween, you can choose to apply it to the available properties that currently have keyframes. This keeps you from having to open the massive Motion Editor editor panel, while still taking advantage of much of the power and flexibility that the new motion model offers. And, since recording the demo, I’ve also added an overwrite option to this box. If you want the settings to overwrite existing applied eases, you can check this box. For instance, suppose you just applied an ease to X, Y, and rotation (Z)–the default–, but you only wanted the ease to be applied to Y. You can re-apply the ease and uncheck X and rotation, and check the box that says, “Set unchecked properties to ‘No Ease’.” This will remove the first ease that you applied from the X and rotation properties, and apply the new ease to the Y property only.

When you import and export, you can any number of the eases available.

I used many of the same techniques that I created for the MotionSketch tool to interact with the new tweening model. I’m still planning to post a technical explanation on that process if anyone is interested. The EaseCaddy panel is available (free) for CS3 and CS4. There are three reasons why it’s not compatible with earlier versions of Flash: 1) Actionscript 3 components are much more powerful, 2) There’s a lot of XML manipulation in this extension, which would have been a nightmare, until E4X was introduced to JSFL and Actionscript in Flash CS3, 3) Some on the JSFL commands were not available prior to CS3. I used several of Peter DeHaan’s articles on Flash components to get up to speed with some of the AS3 components; I’d highly recommend them.

UPDATE (2/9/2012): Version 2.0 has been optimized for CS5 and above (while still compatible with CS3 and CS4). Additionally, there is now a Pro version of EaseCaddy that allows you to apply an ease to multiple tweens simultaneously.

(compatibility: Flash CS3 and newer)

[I’m using Jing for video capture, which is nice because it’s free, but it crashes constantly and has some other issues that I won’t go into here. If you like this extension and/or you like the video demos/tutorials on this site, you can donate using the link on the right side so that I can invest in some better video capture software.]

New Flash Extension: MotionSketch

Justin | extensions,Flash | Tuesday, February 10th, 2009

I had the idea when Flash CS4 came out to create a tool that recorded drawing in real-time and created a tween based on that drawing. Because of the slick new object-tween in Flash CS4, the tween could be created with just a start and end keyframe, but at the same time, the motion path could be incredibly complex. Additionally, all of the timing could be stored within a single easing curve. The resulting tween would be super clean and super editable. So I was fairly disappointed to find out that none of this new functionality had been included in the  JSFL (extensibility) API when Flash CS4 came out. After a lot of digging behind the scenes in the Flash application, as well as a very useful article and helpful correspondence from Flash engineer John Mayhew,  I came up with a way to accomplish this extension. I will cover the somewhat daunting technical details of this process in a future another post (UPDATE: technical post now available). For now, enjoy the extension!

Want to see it in action? Check out the MotionSketch video demo.

UPDATE (5/1/09): Released the Actionscript class to produce the write-in effect shown in the demo.


(Compatibility: Flash CS4)

Thanks again to John Mayhew, Jen DeHaan, and Richard Galvan @ Adobe.

Flasher Magazine

Justin | Flash,links | Wednesday, December 31st, 2008

Lee Brimelow has posted the first issue of his new online video series entitled Flasher Magazine. It’s one part entertainment, one part tutorial. If you like staying current on Flash topics, you’ll want to bookmark the site.

Source: The Flash Blog.

Page 12 of 19« First...1011121314...Last »