AS3のループ処理Timer
でSignals
を使ってみる。
import org.osflash.signals.natives.NativeSignal; import flash.utils.Timer; import flash.events.TimerEvent; var timer:Timer = new Timer(1000 * 0.5); var loop:NativeSignal = new NativeSignal(timer,TimerEvent.TIMER); loop.addWithPriority(onTimer, 9); loop.add(onTimerSecond); timer.start(); var n:int = 0; function onTimer (e:TimerEvent):void { if (n++ > 3) { loop.removeAll(); return; } trace(n); } function onTimerSecond (e:TimerEvent):void { trace('Second'); } |
【メモ】
リスナーがNativeなEventを扱う場合は必ず引数が必要。
タイマーを止める時にはNativeSignal
インスタンスからリスナーをremoveできる。
loop.removeAll(); |
一挙にリスナー群を削除できるのはかなり便利。
今回のようにリスナー側から削除命令を出す場合は、プライオリティーが一番高いリスナーにremoveAll();
を仕込む。