topical media & game development

talk show tell print

#graphic-flex-image-effects-07-source-aeon-animators-Mover.ax

#graphic-flex-image-effects-07-source-aeon-animators-Mover.ax [swf] [flash] flex


  package aeon.animators {
  
          import aeon.Animation;
          import aeon.easing.Linear;
          import aeon.events.AnimationEvent;
          
          import flash.display.DisplayObject;
          import flash.filters.BlurFilter;
          import flash.geom.Point;
          
          public class @ax-graphic-flex-image-effects-07-source-aeon-animators-Mover extends Animation {
          
                  private var _tween:Tweener;
                  private var _target:DisplayObject;
                  private var _useBlur:Boolean;
                  private var _blurAmount:Number;
                  private var _blurQuality:int;
                  private var _blurFilter:BlurFilter;
                  private var _startValue:Object;
                  private var _endValue:Object;
                  private var _time:Number;
                  private var _easeFunction:Function;
                  private var _lastPosition:Point;
          
                  public function @ax-graphic-flex-image-effects-07-source-aeon-animators-Mover(
                          target:DisplayObject,
                          startValue:Point,
                          endValue:Point,
                          time:Number,
                          easeFunction:Function=null,
                          useBlur:Boolean=false,
                          blurAmount:Number=1,
                          blurQuality:int=1
                  ) {
                          _target = target;
                          _startValue = {x:startValue.x, y:startValue.y};
                          _endValue = {x:endValue.x, y:endValue.y};
                          _time = time;
                          if (easeFunction == null) easeFunction = Linear.easeNone;
                          _easeFunction = easeFunction;
                          _useBlur = useBlur;
                          _blurAmount = blurAmount;
                          _blurQuality = blurQuality;
                  }
          
                  private function onEndTween(event:AnimationEvent):void {
                          stop();
                          dispatchEvent(new AnimationEvent(AnimationEvent.END));
                  }
          
                  private function onChangeTween(event:AnimationEvent):void {
                          var changedValues:Object = _tween.currentValue;
                          _target.x = changedValues.x;
                          _target.y = changedValues.y;
                          if (_useBlur) {
                                  var factor:Number = _blurAmount/10;
                                  _blurFilter.blurX = Math.abs((changedValues.x - _lastPosition.x)*factor);
                                  _blurFilter.blurY = Math.abs((changedValues.y - _lastPosition.y)*factor);
                                  var filters:Array = _target.filters.slice(0, -1);
                                  _target.filters = filters.concat(_blurFilter);
                                  _lastPosition = new Point(changedValues.x, changedValues.y);
                          }
                          dispatchEvent(new AnimationEvent(AnimationEvent.CHANGE));
                  }
                  
                  override public function stop():void {
                          super.stop();
                          if (_useBlur) {
                                  _target.filters = _target.filters.slice(0, -1);
                          }
                          _tween.removeEventListener(AnimationEvent.CHANGE, onChangeTween);
                          _tween.removeEventListener(AnimationEvent.END, onEndTween);
                          _tween.stop();
                  }
          
                  override public function start():void {
                          _tween = new Tweener(null, _startValue, _endValue, _time, _easeFunction);
                          _tween.addEventListener(AnimationEvent.CHANGE, onChangeTween);
                          _tween.addEventListener(AnimationEvent.END, onEndTween);
                          if (_useBlur) {
                                  _lastPosition = new Point(_target.x, _target.y);
                                  var filters:Array = _target.filters || [];
                                  _blurFilter = new BlurFilter(0, 0, _blurQuality);
                                  filters.push(_blurFilter);
                                  _target.filters = filters;
                          }
                          _tween.start();
                          super.start();
                  }
          
          }
          
  }


(C) Æliens 04/09/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.