クロージャを使ってaddEventListenerしたイベントをremoveEventListenerする。
おはようございます。遅い夏休みは沖縄&石垣にいってきました。キジマです。
今年ももうあとのこり100日をきりましたね。
最近当level0ブログの更新頻度がちょっと下がってきているので、Flash開発を通じてちょっとでも気づいたことがあれば、Twitterでつぶやくように出していこうと思います。
ということで、まずはイベントリスナー&クロージャについてモヤッとしていたことがさいきんスッキリしたよ、というお話です。
クロージャを使ったイベントはどうremoveEventListenerすべきか?
argumentsオブジェクトの存在を知らなかったので、そんなときはクロージャを使わずにいちいち一時的に使うためだけの関数を定義していました。
ですが、このargumentsオブジェクト。ドキュメントを見てみたところ現在実行中の関数の引数がarguments.calleeに保存されているらしく、removeEventListenerの引数にarguments.calleeを入れておけば、クロージャを使ったイベントも削除できるとか。しらなかったー。
ひとまず使用例をwonderflに投稿してみました。
addEventListener()の引数内にクロージャを記述して、条件を満たしたらそのクロージャ内でremoveEventListener()を実行しています。
遊んでいたら、なんだかよくわからないサンプルになってしまいました。。
要は、毎フレームごとに、テキストフィールドに一文字ずつ文字を追加して、最後までいったらイベントを削除する、というものです。
stage.addEventListener(Event.ENTER_FRAME, function():void { t.appendText( TEST_STRING.charAt(count) ); count++; if (count >= max_count) { stage.removeEventListener(Event.ENTER_FRAME, arguments.callee); } });