⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tween.as

📁 用于flash/flex的 as3的 2D图形图像图表的动态生成
💻 AS
字号:
package flare.animate
{
	import flare.animate.interpolate.Interpolator;
	import flare.util.Property;
	
	import flash.display.DisplayObject;
	
	/**
	 * Transition that interpolates (in-be<em>tweens</em>) properties
	 * of a target object over a time interval. The <tt>values</tt> property
	 * represents the set of properties to tween and their final values. Any
	 * arbitrary property (not just visual properties) can be tweened. The
	 * Tween class handles tweening of Numbers, colors, Dates, Points,
	 * Rectangles, and numeric Arrays. Properties of other types are simply
	 * swapped when then Transition half-completes. Tweening for custom types
	 * is possible, see the <tt>flare.animate.interpolate.Interpolator</tt>
	 * class for more.
	 * 
	 * <p>Starting values are automatically determined from the tweened object.
	 * Once determined, these starting values are stored to allow both forward
	 * and backward playback. Use the <tt>reset</tt> method to force a tween to
	 * redetermine the starting values the next time it is played. Tweens also
	 * provide a <code>remove</code> flag for DisplayObjects. When set to true,
	 * a display object will be removed from the display list at the end of the
	 * tween. Note that playing the tween is reverse will not revert this
	 * removal.</p>
	 * 
	 * <p>Internally, a Tween creates a set of Interpolator objects to compute
	 * intermediate values for each property included in <tt>values</tt>. Note
	 * that property names can involve nested properties. For example,
	 * <tt>{"filters[0].blurX":5}</tt> is a valid tweening property, as both
	 * array access (<tt>[]</tt>) and property access (<tt>.</tt>) syntax are
	 * supported.</p>
	 * 
	 * <p>To manage a collection of objects being tweened simultaneously, use a
	 * <tt>Transitioner</tt> object.</p>
	 */
	public class Tween extends Transition
	{
		// -- Properties ------------------------------------------------------
		
		private var _interps:Array = new Array();
		private var _target:Object;
		private var _from:Object;
		private var _remove:Boolean = false;
		private var _visible:Object = null;
		private var _values:Object;
		
		/** The target object whose properties are tweened. */
		public function get target():Object { return _target; }
		public function set target(t:Object):void { _target = t; }
		
		/** Flag indicating if the target object should be removed from the
		 *  display list at the end of the tween. Only applies when the target
		 *  is a <code>DisplayObject</code>. */
		public function get remove():Boolean { return _remove; }
		public function set remove(b:Boolean):void { _remove = b; }
		
		/** The properties to tween and their target values. */
		public function get values():Object { return _values; }
		public function set values(o:Object):void { _values = o; }
		
		/** Optional starting values for tweened properties. */
		public function get from():Object { return _from; }
		public function set from(s:Object):void { _from = s; }
		
		
		// - Methods ----------------------------------------------------------
		
		/**
		 * Creates a new Tween with the specified parameters.
		 * @param target the target object
		 * @param duration the duration of the tween, in seconds
		 * @param values the properties to tween and their target values
		 * @param remove a display list removal flag (for
		 *  <code>DisplayObject</code> target objects
		 * @param easing the easing function to use
		 */
		public function Tween(target:Object, duration:Number=1,
			values:Object=null, remove:Boolean=false, easing:Function=null)
		{
			super(duration, 0, easing);
			
			_target = target;
			_remove = remove;
			_values = values==null ? {} : values;
			_from = {};
		}
		
		/** @inheritDoc */
		public override function dispose():void
		{
			// reclaim any old interpolators
			while (_interps.length > 0) {
				Interpolator.reclaim(_interps.pop());
			}
			// remove all target values
			for (var name:String in _values) {
				delete _values[name];
			}
			_visible = null;
			_remove = false;
			_target = null;
		}
		
		/**
		 * Sets up this tween by creating interpolators for each tweened
		 * property.
		 */
		protected override function setup():void
		{
			// reclaim any old interpolators
			while (_interps.length > 0) {
				Interpolator.reclaim(_interps.pop());
			}
			
			// build interpolators
			var vc:Object, v0:Object, v1:Object;
			for (var name:String in _values) {
				// create interpolator only if start/cur/end values don't match
				vc = Property.$(name).getValue(_target);
				v0 = _from.hasOwnProperty(name) ? _from[name] : vc;
				v1 = _values[name];
				
				if (vc != v1 || vc != v0) {
					if (name == "visible") {
						// special handling for visibility
						_visible = Boolean(v1);
					} else {
						_interps.push(Interpolator.create(_target, name, v0, v1));
					}
				}
			}
		}
		
		/**
		 * Updates target object visibility, if appropriate.
		 */
		protected override function start():void
		{
			// set visibility
			var item:DisplayObject = _target as DisplayObject;
			if (item != null && Boolean(_visible))
				item.visible = true;
		}
		
		/**
		 * Steps the tween, updating the tweened properties.
		 */
		internal override function step(ef:Number):void
		{
			// run the interpolators
			for each (var i:Interpolator in _interps) {
				i.interpolate(ef);
			}
		}
		
		/**
		 * Ends the tween, updating target object visibility and display
		 * list membership, if appropriate.
		 */
		protected override function end():void
		{
			// set visibility, remove from display list if requested
			var item:DisplayObject = _target as DisplayObject;
			if (item != null) {
				if (_remove && item.parent != null)
					item.parent.removeChild(item);
				if (_visible != null)
					item.visible = Boolean(_visible);
			}
		}
		
	} // end of class Tween
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -