- 2009年11月10日 01:27
- ActionScript 3.0
ちょっと前に、EnterFrameはまとめると速いという
内容の記事を書いたわけですが
今度は TimerEvent をまとめる便利クラス書いてみたので晒します。
内容の記事を書いたわけですが
今度は 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 をまとめる事で
結局どんだけ速くなんのよって部分が書けていない・・・
まあ、そこ気になる人もいますよね。(いてほしい)
なにより、自分が気になっているわけです。
ただ、この記事そこそこな長さになってしまったので
そこに関しては、これからもう一記事書きまする。