AS3のstarlingフレームワークの実行順序

starlingフレームワークをちょっと調べてみた。Version 1.4.1
http://gamua.com/starling/


starlingフレームワークではSpriteとかDisplayObjectの派生クラスにて
・ENTER_FRAME
・TOUCH
・KEY_DOWN
をaddEventListenerしてなんかしらのイベント処理を行う。
(注意:import flash.display.Sprite; などのAS3でのaddEventListenerの話ではありません)

	import starling.display.Sprite;

	public class Game extends Sprite
	{
		...

		public function Game()
		{
			addEventListener(TouchEvent.TOUCH, onTouch);
			addEventListener(Event.ENTER_FRAME, onEnterFrame);
			addEventListener(KeyboardEvent.KEY_DOWN, onKey);
		}

		private function onTouch(event:TouchEvent):void
		{
			...something
		}

		private function onEnterFrame(event:EnterFrameEvent):void
		{
			...something
		}

		private function onKey(event:KeyboardEvent):void
		{
			...something
		}


この際、onTouch onEnterFrame onKey の実行順序が不定の場合、もしくは何かを実行している最中に割り込みがかかる可能性がある場合、非常に厄介なバグになるので実行順序を確認した。

結論
・onTouch→onEnterFrame は実行順序保障されている。
・しかし、タッチの割り込みが多い場合はonTouch→onTouch→onTouch→onEnterFrame という実行になる場合がある。
・onKey はいつどこで走るかわからない。

ということのようなので何かと使いづらいし危険だ・・・
「キーもタッチも1フレームに1回取得しに行って、もし中間があっても中間点は捨てる」
という実装にしてくれたほうが面倒ないんだけど。
これだと素のAS3とあんまり変わらない。うーん。

Unityとか最近のゲームフレームワーク的なものはこういうイベントドリブンの実装が多いんだけど、こういうフレームワーク上にプログラムをうまくまとめる方法論がいまいち見つかってないんだよなあ。