setIntervalとEvent.ENTER_FRAME

ゲームを作るのにタイマーが必要になる。

で、Spriteクラスから派生すれば setIntervalメソッドが使えるので、そのまま

  setInterval(onTimer,50);

とすれば、50ミリ秒ごとにonTimerメソッドが呼び出される。しかし、これだと、表示のタイミング(フレームレート)とonTimerが呼び出されるタイミングがずれることがある。

たとえば24FPSだと、画面表示はおよそ42ミリ秒ごとに行われるので、50ミリ秒ごとにキャラクタを更新していると、たまに不整合がおきて表示がかくかくしてしまう。

結局、フレームレートを固定して、Event.ENTER_FRAMEを受け取るほうが良いようだ。

フレームレートを指定するには、コンフィグファイル(ファイル名-config.xml)の中で

<default-frame-rate>24</default-frame-rate>

とする(この例では24FPS)。Event.ENTER_FRAMEは、受け取りたいクラス(Spriteの派生クラス)で

  stage.addEventListener(Event.ENTER_FRAME, onEnterFrame); 

とすれば、1/24秒に一度 onEnterFrameが呼び出される。このタイミングで画面表示を更新すればアニメーションがスムーズになるようだ。