Motion XML in Flash

Tuesday, November 11th, 2008 | thoughts | No Comments

Here’s a good read which I’ll post more about in the future:

http://flashthusiast.com/2008/11/04/understanding-flash-cs4-motion-xml/

Flash CS4 Trial Available for Download

Monday, November 10th, 2008 | thoughts | 1 Comment

Finally!

http://www.adobe.com/downloads/

IK in Flash CS4 Part 2

Friday, November 7th, 2008 | examples | 1 Comment

I thought I’d have some fun and add a few more arms in there. Now it kind of looks like 4 arms passing the box around. Enjoy.

View example
Download .fla and source

package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.geom.Point;
	import flash.geom.Matrix;
	import fl.ik.*;
 
	import gs.*;
 
	/**
	 * @author John Lindquist - fp10.org
	 *
	 * note - In your armature layer, remember to set the "type" to "runtime"
	 */
	public class Main extends Sprite 
	{
		private const arms:Vector.<String> = Vector.<String>(["arm", "arm2", "arm3", "arm4"]);
		private const MAX_X:Number = 550;
		private const MAX_Y:Number = 400;
 
		private var ikMovers:Vector.<IKMover> = new Vector.<IKMover>();
 
		public function Main() 
		{
			//wait for the IK to be built before doing anything
			addEventListener(Event.FRAME_CONSTRUCTED, frameConstructedHandler);
		}
 
		private function frameConstructedHandler(event:Event):void
		{
			removeEventListener(Event.FRAME_CONSTRUCTED, frameConstructedHandler);
 
			setupIK();
			setupMotion();
		}
 
		private function setupIK():void
		{
			//dig into the IK structure to get set up a reference to the end position
			for each(var arm:String in arms)
			{
				var tree:IKArmature = IKManager.getArmatureByName(arm);
				var bone:IKBone = tree.getBoneByName("bone");
				var endEffector:IKJoint = bone.tailJoint;
				var position:Point = endEffector.position;
 
				//setup an IKMover for moving the "tail" position
				var ikMover:IKMover = new IKMover(endEffector, position);
 
				ikMovers.push(ikMover);
			}
		}
 
		private function setupMotion():void
		{
			var targetX:Number = Math.random() * MAX_X;
			var targetY:Number = Math.random() * MAX_Y;
 
			TweenMax.to(tracker, 2, {x:targetX, y:targetY, onUpdate:onTweenUpdate, onComplete:setupMotion});
		}
 
		private function onTweenUpdate():void
		{
			var position:Point = new Point(tracker.x, tracker.y);
			for each(var ikMover:IKMover in ikMovers)
			{
				ikMover.moveTo(position);
			}
		}
	}
}

Controlling IK with ActionScript

Thursday, November 6th, 2008 | examples | No Comments

View example
Download .fla and source

package {
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.geom.Point;
	import flash.geom.Matrix;
	import fl.ik.*;
 
	import gs.*;
 
	/**
	 * @author John Lindquist - fp10.org
	 *
	 * note - In your armature layer, remember to set the "type" to "runtime"
	 */
	public class Main extends Sprite 
	{
		private var ikMover:IKMover;
		private var position:Point;
 
		private const MAX_X:Number = 550;
		private const MAX_Y:Number = 400;
 
		public function Main() 
		{
			//wait for the IK to be built before doing anything
			addEventListener(Event.FRAME_CONSTRUCTED, frameConstructedHandler);
		}
 
		private function frameConstructedHandler(event:Event):void
		{
			removeEventListener(Event.FRAME_CONSTRUCTED, frameConstructedHandler);
 
			setupIK();
			setupMotion();
		}
 
		private function setupIK():void
		{
			//dig into the IK structure to get set up a reference to the end position
			var tree:IKArmature = IKManager.getArmatureByName("arm");
			var bone:IKBone = tree.getBoneByName("bone");
			var endEffector:IKJoint = bone.tailJoint;
			position = endEffector.position;
 
			//setup an IKMover for moving the "tail" position
			ikMover = new IKMover(endEffector, position);
			ikMover.limitByDistance=true;
			ikMover.distanceLimit=0.1;
			ikMover.limitByIteration=true;
			ikMover.iterationLimit=10;
		}
 
		private function setupMotion():void
		{
			var targetX:Number = Math.random() * MAX_X;
			var targetY:Number = Math.random() * MAX_Y;
 
			TweenMax.to(tracker, 2, {x:targetX, y:targetY, onUpdate:onTweenUpdate, onComplete:setupMotion});
		}
 
		private function onTweenUpdate():void
		{
			position.x = tracker.x;
			position.y = tracker.y;
 
			ikMover.moveTo(position);
		}
	}
}

Categories

Archive

Links

Search