状態
Revision as of 00:25, 16 June 2009 by RoyalTurkey Markstein (talk | contribs)
LSL ポータル | 関数 | イベント | 型 | 演算子 | 定数 | 実行制御 | スクリプトライブラリ | カテゴリ別スクリプトライブラリ | チュートリアル |
LSLでは、ほとんどのスクリプトは何らかの入力を受け取るか、環境で何らかの変化を検出するまで、アイドル状態にあります。どの瞬間も、スクリプトは何らかのstateにあり、プログラマーによって定義された多くのスキームと一致したイベント、あるいはインプットに反応するでしょう。しかしながら、スクリプトは二つ以上の異なるstateを包含することができ、状態によってイベントやインプットに対して異なる反応があります。
中心的なstateはdefault stateです。スクリプトはコンパイルされた時、リセットもしくはリロードされた時、defaultのstateから入ります。default stateの定義の後に、スクリプトでイベントが処理されることを、どのようにそしてどの変更で使用するのか定義しているstateを、続けて追加することができます。
state target { events }
• label | target | – | state名です。 | |
• event | events | – | 一つ以上の イベントです。 |
target state の定義です。
|- |
state target;
• label | target | – | 実行するstate名です。 |
state target;が実行時にぶつかったとき、現在 のstate と target state が異なる場合
- 現在のstate内でstate_exitが実行する場合、現在のstateは終了し、イベントキューは消去されます。
- targetにstateが変わると、全てのlistenは解除されます。
- target stateのstate_entryが実行された場合、target stateは
終了します。 もしtarget state が現在のstateと同じ場合、stateを変えることもいくつかの効果をだすこともできないわけではありません。
注意点
- stateを変える上で
- 全てのlistenはリリースされます。
- イベントキューは消去されます。
- default stateはほかのstateに行く前に定義すべきです。
- state範囲内にユーザ関数、あるいはユーザ変数を設定することはできず、 イベントだけがstate範囲内で定義できるでしょう。
サンプル
default { touch_start(integer a) { state hello; } } state hello { state_entry() { llOwnerSay("Hello"); state default; } state_exit() { llOwnerSay("Goodbye"); } }
参考情報