mx.effects.TweenクラスをActionScriptプロジェクトで使ってみる。

Flash8のときにあったTweenクラスみたいのAS3にもあるのかなぁ、と眺めてみたところ、mxパッケージに似たようなものを発見したので試しに使ってみました。ちょっと使い勝手はよくないのですけれども、下記のようなクラス(非常に適当ですが)とか一個書いておけばほんのちょっとした場面ではそれなりに使えそう。

ただし、ActionScriptプロジェクトでmxパッケージのクラスを使う場合はいろいろと面倒がありまして、コンパイル前にプロジェクトのライブラリパスに以下のものを加える必要がある模様。

${FRAMEWORKS}/libs/framework.swc

で、あまり整ってないですがソース。

package
{
	import mx.effects.easing.Linear;
	import mx.effects.Tween;
	
	public class TweenGenerator
	{
		private var target:Object;
		private var prop:String;
		public function TweenGenerator(
			targetObj:Object,
			targetProp:String,
			start:Number=0,
			end:Number=1,
			duration:Number=1000,
			easingFunc:Function=null)
		{
			if(easingFunc==null){
				easingFunc=mx.effects.easing.Linear.easeOut;
			}
			target=targetObj;
			prop=targetProp;
			var tween:Tween=new Tween(this,start,end,duration);
			tween.easingFunction=easingFunc;
			tween.setTweenHandlers(tweenUpdate,tweenEnd);
		}
		
		private function tweenUpdate(val:Number):void{
			target.visible=true;
			target[prop]=val;
		}
		private function tweenEnd(val:Number):void{
			delete(this);
		}
	}
}

使い方

var tw:TweenGenerator=new TweenGenerator(
this, //トゥイーンさせるオブジェクト(Object)
"y", //↑のオブジェクトのうちトゥイーンさせるプロパティ名(String)
0,//最初の値 (Number)
500,//トゥイーン完了時の値 (Number)
1000,//トゥイーンさせる時間(ミリ秒)(Number)
mx.effects.easing.Elastic.easeOut //トゥイーンさせる時の効果をつけるための関数(Function)
);

↑のようにすると、thisのyが0から500に変化する、と。

ちなみにもちっと拡張すればトゥイーン終了時にイベント発生させるとか、アニメーションの連結とか、複数プロパティ同時コントロールとかそういうのもできそうです。