Home > ActionScript 3.0 > AS3.0 EnterFrameに引き続きTimerEventの最適化クラスを作ってみた

AS3.0 EnterFrameに引き続きTimerEventの最適化クラスを作ってみた

ちょっと前に、EnterFrameはまとめると速いという
内容の記事を書いたわけですが
今度は TimerEvent をまとめる便利クラス書いてみたので晒します。

11/10の昼時点のファイルにバグがありました
現在は修正版をアップロードしてあります。
すいません。すいません。すいません。><

とりあえず、ファイル的にはこれになります
サンプルflaとかも入ってます

TimerEventOptimizer.zip


では、早速使い方をば

基本的な使い方


先ずはインスタンスの生成ですが基本Timerと一緒です。
第一引数に delay, 第二引数に repeatCount を指定します。
(挙動は基本Timerに則るので細かい説明は割愛します)

// delay 1000 ms で optimizer を生成.
var opt:TimerEventOptimizer = new TimerEventOptimizer( 1000 );

で、後は突っ込む・・・のですが
今回は EnterFrame 版とちょっと違います。

EnterFrame 版の引数はリスナのみだったのですが
今回は引数が三つあります。


◆ type
  TimerEvent.TIMER か TimerEvent.TIMER_COMPLETE を指定

◆ listener
  これはいつも通りのイベントリスナです。

◆ repeatCount [ default : 0 ]
  これはちょっと特殊なので後述します。


第三引数を考えなければ、ほぼ普段のTimerと変わりません。
で、とりあえず普通の使い方。

登録 / 削除 は普段の感じで出来ます。
// optimizer に登録.
opt.addEventListener( TimerEvent.TIMER, closure );
opt.removeEventListener( TimerEvent.TIMER, closure );

このように、ほぼTimerと同じ感覚で使えるので
それなりに使いやすいんじゃないかなと思います。



ですが、このクラスはこれだけでは終わらせません。
これだけならあんまり利点無いですからね。



便利な機能


Timerっていろいろと使い方があるじゃないですか。
でも結構使う時面倒なことが多いというか
repeatCount を 1 にしてちょこっと使いたいだけなのに
わざわざ作るのだるいなー。みたいな事があったりして。

なので、そんなめんどくさい事を
手助けする機能を盛り込みました。

その機能は、先ほどあえて説明をしなかった
addEventListner の第三引数 repeatCount に隠されています。


回数指定 リスナ登録


例えば、10回だけタイマー回したい。
そんなときはこの機能を使うと便利です。

// 10回だけ TimerEvent.TIMER を受け取る.
opt.addEventListener( TimerEvent.TIMER, closure, 10 );

こうすることで、10回だけ closure を実行したのち
リスナの登録から勝手に外されます。

気軽に TimerEvent.TIMER_COMPLETE


10回だけタイマー回ったのを知りたい。
delayは一緒だけど、ここでは10回で、こっちでは12回。
そんな面倒な状況に出くわした時はこの機能が便利です。

以下の方法で、それらを解決できます。

// タイマーが10回実行されたタイミングで
// TimerEvent.TIMER_COMPLETE を受け取る.
opt.addEventListener( TimerEvent.TIMER_COMPLETE, closure, 10 );

こうすることで、10回タイマーが実行されたのち
closure が実行され、リスナの登録から勝手に外されます。


この二つが、TimerEventOptimer の便利機能になります。


まとめ


これらの機能は、作った本人が言うのもなんですが
ただの Timer に比べてかなり便利です。

ただ、一点だけ注意点がありまして、それは
Timer が既に start された状態で、これらの関数を実行すると
delay のタイミングによっては正確なタイミングとならない事です。

例えば,delay が 3000 とかだと 1500msたったタイミングで関数実行すると
一回目の TimerEvent.TIMER は 1500ms 後に実行されてしまいます。たぶん

まあ、これはもともと Timer にも、ついてまわる問題なので
あまり気にならないかもしれませんが。

個人的には delay を 100 とか小さい値にしといて
第三引数の repeatCount で時間調整してに使ってます。
これだけでもかなり軽量化が望めます。

またまた地味なクラスですが、よかったらどうぞ。
ただ、バグとかあっても責任はもてませんが・・・

でも言ってくれれば直します。















おっと、TimerEvent をまとめる事で
結局どんだけ速くなんのよって部分が書けていない・・・

まあ、そこ気になる人もいますよね。(いてほしい)
なにより、自分が気になっているわけです。

ただ、この記事そこそこな長さになってしまったので
そこに関しては、これからもう一記事書きまする。

Comments:0

Comment Form

コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。

Trackbacks:0

TrackBack URL for this entry
http://blog.flair4.jp/mt/mt-tb.cgi/61
Listed below are links to weblogs that reference
AS3.0 EnterFrameに引き続きTimerEventの最適化クラスを作ってみた from flair4 blog

Home > ActionScript 3.0 > AS3.0 EnterFrameに引き続きTimerEventの最適化クラスを作ってみた

Search
Feeds

Return to page top