Inactivityクラス(マウス・キーボード・リサイズイベントの監視)

2010.11.16kickbaseActionScript3.0


CASA Lib AS3のInactivityクラスを使用して「一定時間インタラクションがなかったら○○する」という実装をしてみます。
AS3版のCASAはあまり情報がないようなのでポスト。ちなみにCasaLibはBSDライセンスです。

「一定時間インタラクションがない」というイベントがInactivityEvent.INACTIVE。一般的には初期状態ではアクティブな方が使い勝手がいいと思うので、Main(ドキュメントクラス)のコンストラクタで、アクティブイベントを強制的にディスパッチしていところがポイント。(多分問題ないはずです)

This movie requires Flash Player 9

※2秒間マウスが止まっている(ステージ外にある)と円が表示され、動くと消えます。

以下ソース。

Main

package 
{
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.Event;
	import org.casalib.events.InactivityEvent;
	import org.casalib.time.Inactivity;
	import org.casalib.util.StageReference;
	
	/**
	 * ...
	 * @author kickbase
	 */
	[SWF(width = "640", height = "480", frameRate = "30", backgroundColor = "#ffffff")]
	
	public class Main extends Sprite 
	{
		private var ball:Ball = new Ball();
		
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
		
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			
			//ステージ設定
			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.align = StageAlign.TOP_LEFT;
			
			// 円を作成
			ball.x = ball.y = 30;
			addChild(ball);

			/*
			 * CASA Lib AS3
			 * Inactivityクラスを使ってマウス/キーボード/リサイズイベントを監視
			*/
			StageReference.setStage(stage);
			var mouseWatch:Inactivity = new Inactivity(2000);//msでイベント発動までの時間を設定
			mouseWatch.addEventListener(InactivityEvent.ACTIVATED, onActivated);
			mouseWatch.addEventListener(InactivityEvent.INACTIVE, onInactive);
			mouseWatch.start();
			
			//アクティブイベントを強制的に発動して、円が見えない状態からスタート
			mouseWatch.dispatchEvent(new InactivityEvent(InactivityEvent.ACTIVATED));
		}

		private function onInactive(e:InactivityEvent):void
		{
			ball.visible = true;
			trace("インアクティブ\n---");
		}

		private function onActivated(e:InactivityEvent):void
		{
			ball.visible = false;
			trace("アクティブ");
		}
	}
}

Ball

package
{
	import flash.display.Sprite;

	public class Ball extends Sprite
	{
		private var _radius:Number;
		private var _color:uint;
		
		/*--------------------------------------------------------------------------
		 * コンストラクタ
		 *---------------------------------------------------------------------*//**
		 * <p>円を描くクラス(引数を省略すると、半径20、ランダムカラーの円が描画される)</p> 
		 */
		public function Ball(radius:Number = 20, color:uint = 0x0)
		{
			color ||= Math.random() * 0xFFFFFF;
			this._radius = radius;
			this._color = color;
			draw();
		}

		private function draw():void
		{
			with (graphics)
			{
				beginFill(_color);
				drawCircle(0, 0, _radius);
				endFill();
			}
		}
	}
}

サンプルのダウンロード


ページトップへ