2009年1月4日日曜日

ENTER FRAME イベント その2

さて、ENTER_FRAMEイベントで何か処理をするとき、大抵ループの処理になるのだが、概ね次のような処理が一般的に必要になる。事前にそれらの処理が実装されていれば、後で必要になっても、コードがスパゲティーにならずに済み、イベントリスナーの消し忘れや、二重登録等によるバグにリソース不足に悩まされることも減るだろう。そんなクラスを実装してみたいと思う。

アプリケーション固有に実装すべき処理は、以下の3つになるはず。

  • ENTER_FRAMEイベントを受けて処理される、ループ内処理の本体

  • ループ開始前で処理される、前処理

  • ループ処理完了後に処理される、後処理


ただし、常に3つすべて必要になるわけではないので、省略可能とする。これらの処理を制御するためのメソッドは次の5つ。

  • start()...ENTER_FRAMEイベントリスナーを登録し、ループ処理を開始する。このメソッドを実行する前に、前処理は実行されている。

  • pause()...ループ処理を一時停止する。実際には、ENTER_FRAMEのイベントリスナーの登録を解除する。再度イベントリスナーの処理を開始したければ、resume()を呼ぶ。

  • resume()...pause()により一時停止されたループ処理を、再開する。

  • revert()...ENTER_FRAMEのイベントリスナーの登録を解除して、前処理を再度実行したところで止まる。再度、イベントリスナーを登録したければ、start()を呼ぶ。

  • skip()...ループ処理の完了を待たずに、ループを抜け(すなわち、イベントリスナーの登録を解除し)、直ちに、後処理を実行する。

  • 各状況において、適切でないメソッドを呼んだ場合、何も実行されない。たとえば、pause()を実行した後に、start()を実行しても何も実行されない。


言葉で書くとややこしいが、絵にしてみるとこんなフローを制御できるクラスになるはず。…といいながら、このアニメーションもすでに、このクラスで実装されているのだが…。


このクラスを使った実装例を次回に紹介したい。