Controlling IK with ActionScript
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); } } }
No comments yet.