timerイベントを使ってみる。

2009/09/03  as3.0, チュートリアル

第3回より、スライドショーを行ってきましたが。

 

オートプレイでスライドショーを作成する。

 

今回はクリックではなくautoで切り替えが行われるように、設定をしたいと思います。

オートプレイってつまりは、数秒ごとに写真をいれかえたいので、

 

タイマー設定をしてあげればいいのです。その名もまさにTimerクラスが存在します。

 

■Timer(ms、num)

msミリ秒ごとに、num回くりかえす。(numをかかない場合は∞回繰り返す。) となります。

 

これは、繰り返すものを用意しただけなので、「始まるタイミング」と「何」を繰り返すか設定します。

 

sample

次のは「2秒ごとに、_funcを繰り返す」というスクリプトです。

var _timer:Timer = new Timer(2000);
_timer.addEventListener(TimerEvent.TIMER, _func);
_timer.start();

となります。

以上の内容を前回のスクリプトに加えるだけです。 (importもわすれずに。)

package  {
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import fl.transitions.*;
	import fl.transitions.easing.*;
	import flash.events.TimerEvent;
	import flash.utils.Timer;

	public class index extends Sprite {

		var _nowNum = 1
		var _imgArr:Array

		public function index() {
			_imgArr = new Array();
			_imgArr = [pict1,pict2,pict3,pict4,pict5]
			for (var i:uint = 0 ; i < _imgArr.length ; i++ ) {
				_imgArr[i].visible = false;
			}
			_imgArr[0].visible = true

			var _timer:Timer = new Timer(2000);
			_timer.addEventListener(TimerEvent.TIMER, _slide);
			_timer.start();
		}

		private function _slide(e:Event):void {
			for (var i:uint = 0 ; i < _imgArr.length ; i++ ) {
				_imgArr[i].visible = false;
			}
			_imgArr[_nowNum].visible = true;
			TransitionManager.start(_imgArr[_nowNum], { 
				type:Wipe, 
				direction:Transition.IN, 
				duration:0.5, 
				easing:Regular.easeIn, 
				startPoint:4
			});
			if (_nowNum == _imgArr.length - 1) {
				_nowNum = 0
			}else {
				_nowNum++;
			}
		}

	}

}

と書くと以下のようなスライドショーを実行する事が出来ます。

This movie requires Flash Player 9.0.0

 

キリトリ線

 

■応用編

 

タイマー0でもそのファンクションを実行する。

 

timerイベントだと今回の例で言うと2秒、4秒、6秒、8秒で実行されます。

実際に使用する時には0秒のタイミングでも一度実行をしたい事がたたあるかとおもいます。

 

var _timer:Timer = new Timer(2000);
_timer.addEventListener(TimerEvent.TIMER, _func);
_timer.start();
_func()
・・・
function _func(e:Event):void{}

 

とした場合に_func()を実行する際に引数が入っていないとエラーが起きます。

逆に_func(e:Event)の中身をとって_func()とした場合にはEventの引数が渡されるために、タイマーのタイミングでエラーが発生します。

 

_func(e:Event)を_func(e:Event=null)としてやることで解決します。

この意味は引数がある場合にはeを返し、無い場合にはnullを返しますと言う意味で、引数があってもなくてもいいです。という事です。

var _timer:Timer = new Timer(2000);
_timer.addEventListener(TimerEvent.TIMER, _func);
_timer.start();
_func()
・・・
function _func(e:Event=null):void{}

上記のスクリプトにする事によって0秒、2秒、4秒、6秒のタイミングでファンクションを実行する事が出来ます。

 

まとめ

タイマーは.stop()で動作をとめたり できます。

また回数を指定した時には その回数終わった時に TIMER_COMPELTE(イベント) が発行されます。