ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

イベントの順番

フレーム更新イベントとキーボードイベントはどのような順番で呼び出されるのか調べてみた。

package {
    import flash.display.*;
    import flash.events.*;

    public class test extends Sprite {
        private var FrameNo:int = 0;
        public function test() {
            trace("test");
            stage.addEventListener(Event.ENTER_FRAME, onEnterFrame0);
            stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
            stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp);
            stage.addEventListener(Event.ENTER_FRAME, onEnterFrame1);
        }
        public function onEnterFrame0(e:Event):void {
            FrameNo++;
            trace("Frame0 " + FrameNo);
        }
        public function onEnterFrame1(e:Event):void {
            trace("Frame1 " + FrameNo);
        }
        public function onKeyDown(e:KeyboardEvent):void {
            trace("keydown " + FrameNo);
        }
        public function onKeyUp(e:KeyboardEvent):void {
            trace("keyup " + FrameNo);
        }
    }
}

このプログラムを実行結果のログは次のとおり。

test
Frame0 1
Frame1 1
Frame0 2
Frame1 2
...(中略)
Frame0 24
Frame1 24
Frame0 25
Frame1 25
keydown 25
Frame0 26
Frame1 26
Frame0 27
Frame1 27
keyup 27
Frame0 28
Frame1 28
Frame0 29
Frame1 29

イベントの登録は二つのフレーム更新の間にキーボードイベントを登録しているが、呼び出された順番はフレーム更新二つのあとにキーボードイベント。キーボードイベントはフレーム更新のあとに行われるようだ。
いま作っているクラスではイベントは登録された順番で動作する前提で作っていたので、実装方法を変更しなくては。