y[Wgbv

AS3.0 Class

基本のクラスを作って汎用化する

Spriteクラスを継承して新しいクラスを作る際に毎回必ずインポートするものとか、メソッドとかあると思うけどそんなのをいちいちクラス作る度にやってたら日が暮れちゃうよって事でそういうのを全部持たせた自分用のSpriteクラスを作っとこうって話。

sprite


自分の場合、表示オブジェクトを作成する際以下のものをインポートさせる。

import flash.display.Sprite;
import flash.events.Event;
import flash.utils.Timer;
import flash.events.TimerEvent;
/*以下はtweesyインポート
http://code.google.com/p/tweensy/*/
import com.flashdynamix.motion.*;
import fl.motion.easing.*;


それから、下記のメソッドを持たせる。
・ステージに追加された時に呼び出されるメソッド
・ステージから削除された時に呼び出されるメソッド
・時間差で関数を実行出来るメソッド

これらを持たせておけば、このクラスを継承するだけで、欲しいものが最初っから備わってるのでちょー便利なの。

では早速そんな便利なクラスのコードを作りましょう。

汎用化クラスの名前はなんでも良いけどクラスライブラリなんかによく使われてるAbstractっていうのを頭に付けてAbstractSpriteとする。

package {
 
	import flash.display.Sprite;
	import flash.events.Event;
	import com.flashdynamix.motion.*;
	import fl.motion.easing.*;
 
	public class AbstractSprite extends Sprite {
 
		/*tweengyを簡単に呼び出す為にメンバに登録*/
		public var tg:TweensyGroup=new TweensyGroup();
		protected var ttl:TweensyTimeline;
		protected var qtEI:Function=Quartic.easeIn;//筆者はQuarticが好きみたいだ
		protected var qtEO:Function=Quartic.easeOut;
		protected var qtEIO:Function=Quartic.easeInOut;
 
		/*コンストラクタ*/
		public function AbstractSprite() {
			addEventListener(Event.ADDED_TO_STAGE,_initialize);//ステージに追加された時
			addEventListener(Event.REMOVED_FROM_STAGE,_uninitialize);//ステージから削除された時
		}
		private function _initialize(e:Event):void {
			initialize();
		}
		private function _uninitialize(e:Event):void {
			uninitialize();
		}
 
		//継承したクラスは以下をオーバーライドする
		protected function initialize():void {}
		protected function uninitialize():void {}
	}
}



このクラスを継承したクラスを作り、ステージに追加された時に処理したい場合initializeをオーバーライドしその中にコードを記述する。

そして、ステージから削除された時に処理したい場合はuninitializeにコードを書いて行けば良い。

以下、子供のクラス。TestSpriteとする。

package {
 
	public class TestSprite extends AbstractSprite {
 
		public function TestSprite() {
			super();//明示的にsuperクラスのコンストラクタ呼び出し
		}
		protected override function initialize():void {
			alpha=0;
 
			tg.to(this,{alpha:1},1,qtEO);
 
			trace("ステージに追加されましたよー");
		}
		protected override function uninitialize():void {
			trace("ステージから削除されちゃいましたー");
		}
	}
}






Get Adobe Flash player




もっと使い易くする為に時間差で命令が出せる様にAbstractSpriteに以下をインポート。

import flash.utils.Timer;
import flash.events.TimerEvent;


そしてクラスプロパティの中に以下のメソッドを追加。

protected function delay(f:Function,time:Number,target:Sprite=null):void {
			if (target==null) {
				target=this;
			}
			var timer:Timer=new Timer(time*1000,1);
			timer.addEventListener(TimerEvent.TIMER,timerEventHandler);
			function timerEventHandler(e:TimerEvent):void {
				timer.removeEventListener(TimerEvent.TIMER,timerEventHandler);
				f.call(target);
			}
			timer.start();
		}


追加部分を入れたコードがコレ↓

package {
 
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.utils.Timer;
	import flash.events.TimerEvent;
	import com.flashdynamix.motion.*;
	import fl.motion.easing.*;
 
	public class AbstractSprite extends Sprite {
 
		protected var tweenGroup:TweensyGroup=new TweensyGroup();
		protected var tweenAction1:TweensyTimeline;
		protected var tweenAction2:TweensyTimeline;
		protected var qtEI:Function=Quartic.easeIn;
		protected var qtEO:Function=Quartic.easeOut;
		protected var qtEIO:Function=Quartic.easeInOut;
 
		public function AbstractSprite() {
			addEventListener(Event.ADDED_TO_STAGE,_initialize);
			addEventListener(Event.REMOVED_FROM_STAGE,_uninitialize);
		}
		private function _initialize(e:Event):void {
			initialize();
		}
		private function _uninitialize(e:Event):void {
			uninitialize();
		}
		protected function initialize():void {
		}
		protected function uninitialize():void {
		}
		protected function delay(f:Function,time:Number,target:Sprite=null):void {
			if (target==null) {
				target=this;
			}
			var timer:Timer=new Timer(time*1000,1);
			timer.addEventListener(TimerEvent.TIMER,timerEventHandler);
			function timerEventHandler(e:TimerEvent):void {
				timer.removeEventListener(TimerEvent.TIMER,timerEventHandler);
				f.call(target);
			}
			timer.start();
		}
	}
}


AbstractSpriteを継承した子クラスのメソッド内で時間差で関数を実行出来るようになる。
(tweensyGroupのtoメソッド 第五引数の様なもの)

//第二引数に1を入れたとしたら1秒後に実行する
delay(実行したい関数名:Function,何秒後に実行するか:Number);
 
//こんな書き方もある
delay(function():void{
			   //3.5秒後にやりたい事を記述する
			   trace("3.5秒が経ちました。");
			   },3.5)




Get Adobe Flash player



こんな感じで自分用に汎用化しておくと仕事がちょっとは早くなるよねーってお話でした。

no comment