gameloopの動作を理解するためのサンプル2

概要

では実際、gameloopはどういった条件で発生するのか?ということを確認するためのサンプルです。

"init"から"init ok"までの間にカウントは表示されないことから、main終了までgameloopは呼び出されないということがわかります。

また、"gameloop in"から"gameloop out"までの間に次の"gameloop in"が表示されることも無いので、gameloopが多重コールされないということもわかります。
同様にgameloop中に端末を振ってもshakeはコールされません。

このことから全ての処理はシングルタスクで処理され、"events"は正確には「割込み」ではなくアイドル状態のときのみ発生するということがわかります。

そのためもし50ms単位で正確に何らかのカウントをする必要がある場合、全ての処理は必ず50ms以内で完了させる必要があります。

"//"で始まるコメント行は入力する必要ありません。

data

変数名 種別 初期値 説明
v NUM 0 カウンタ

actions

  • action main()
    • // 初期化
    • "init" → post to wall
    • data → v := 0
    • // ここで1秒以上時間をかけてこの間にgameloopが発生するか確認する
    • for 0 ≦ i < 99999 do
      • // 何もしない
    • // main終了)
    • "init ok" → post to wall

events

  • event gameloop()
    • // gameloop開始
    • "gameloop in" → post to wall
    • // data → vカウントアップ
    • data → v := data → v + 1
    • data → v → post to wall
    • // ここで1秒以上時間をかけてこの間に次のgameloopまたはshakeが発生するか確認する
    • for 0 ≦ i < 99999 do
      • // 何もしない
    • // gameloop完了
    • "gameloop exit" → post to wall

  • event shake()
    • // shake発生
    • "shake!" → post to wall
最終更新:2011年10月28日 06:08