« _discard("/*")は期待通り動作するのか? | メイン | UJMLサンプル102:ステート変数の挙動を学ぶ→もしかしたらはまってしまうかもしれない誤り »

UJMLサンプル101:ステート変数の挙動を学ぶ→scriptブロックから外に出ないと次の処理はできない(2006/04/20)

 今回紹介するサンプルは今までのような描画系のものではなく、ステート変数という特殊な変数にのみフォーカスする。リファレンス中を読んでいると時々出てくるが、

・UIEngineは処理が<script>ブロックの外に出ないと、次の処理を行わない。

という性質がある。

<script>
sLabel = false;
sLabel = true;
無限ループ
</script>

というソースを書くと、sLabelの再表示はいつになっても行われないということだ。(sLabelには適当なヴィジュアルエレメントが定義されていると仮定)

 もちろん、他のイベントの割り込みもできない。例えば、ボタン押し下げでイベント処理をする次のようなものも、

<display>
<box>
  <event name="onSelect">
    <accelerators><key>FIRE</key></accelerators>
    <script>
      sHoge = false;
      sHoge = true;
    </script>
  </event>
</box>
</display>

先程の「無限ループ」実行中は、処理されない。

 簡単な例をサンプルで作成し、ダウンロードできるように貼り付けたので試して欲しい。このソースでは一生懸命sLabelを表示しようとするが、無限ループ処理のため絶対に表示されないのだ。

Download 101_state.ujml

 別の言語では、無限ループでポーリングし、グローバル変数の値を見て、適宜ループを抜けるようなことをするが、UJMLではそれができない。それならどうすべきかは、次回以降に。


トラックバック

この記事のトラックバックURL:
https://www.typepad.com/services/trackback/6a00d8341c2e2e53ef00e5509471e18833

UJMLサンプル101:ステート変数の挙動を学ぶ→scriptブロックから外に出ないと次の処理はできないを参照しているブログ:

コメント

この記事へのコメントは終了しました。