Difference between revisions of "状態"
Jump to navigation
Jump to search
Line 2: | Line 2: | ||
{{LSL Header/ja}} | {{LSL Header/ja}} | ||
<div style="float:right">__TOC__</div> | <div style="float:right">__TOC__</div> | ||
LSLでは、ほとんどのスクリプトは何らかの入力を受け取るか、環境で何らかの変化を検出するまで、アイドル状態にあります。どの瞬間も、スクリプトは何らかのstateにあり、プログラマーによって定義された多くのスキームと一致したイベント、あるいはインプットに反応するでしょう。しかしながら、スクリプトは二つ以上の異なるstateを包含することができ、状態によってイベントやインプットに対して異なる反応を定義できます。 | |||
中心的なstateはdefault | 中心的なstateはdefault stateです。スクリプトはコンパイルされた時、リセットもしくはリロードされた時、まずdefaultのstateが実行されます。default stateの定義の後に続けて、スクリプトで処理されるイベントがどのような入力、変更によって発生するのかを定義する、新たなstateを追加することができます。 | ||
{{#vardefine:name|state | {{#vardefine:name|state | ||
}}{{#vardefine:p_jump_state_desc|実行するstate名です。 | }}{{#vardefine:p_jump_state_desc|実行するstate名です。 | ||
}}{{#vardefine:p_label_state_desc|state名です。 | }}{{#vardefine:p_label_state_desc|state名です。 | ||
}}{{#vardefine:p_events_desc|一つ以上の {{LSLGC|Events|イベント}}です。 | }}{{#vardefine:p_events_desc|一つ以上の {{LSLGC|Events/ja|イベント}}です。 | ||
}}{{#vardefine:header_title|default { {{LSL Param|events}} } | }}{{#vardefine:header_title|default { {{LSL Param|events}} } | ||
}}{{#vardefine:header_text|{{{!}} | }}{{#vardefine:header_text|{{{!}} | ||
Line 35: | Line 35: | ||
''state target;''が実行時に発生し、''現在'' のstate と ''target'' state が異なる場合、以下の順に動作します。 | ''state target;''が実行時に発生し、''現在'' のstate と ''target'' state が異なる場合、以下の順に動作します。 | ||
#現在のstate内に[[state_exit]]が'''存在する場合は実行され、'''イベントキューは消去されます。 | #現在のstate内に[[state_exit]]が'''存在する場合は実行され、'''イベントキューは消去されます。 | ||
#''target''にstateが変わると、'''全ての'''[[listen]]は解除されます。 | #''target''にstateが変わると、'''全ての'''[[llListen/ja|listen]]は解除されます。 | ||
#''target'' stateに[[state_entry]]が'''存在する場合は実行されます。''' | #''target'' stateに[[state_entry]]が'''存在する場合は実行されます。''' | ||
Line 69: | Line 69: | ||
}}{{#vardefine:notes| | }}{{#vardefine:notes| | ||
}}{{#vardefine:caveats|*stateを変える上で | }}{{#vardefine:caveats|*stateを変える上で | ||
**全ての[[llListen|listen]]はリリースされます。 | **全ての[[llListen/ja|listen]]はリリースされます。 | ||
**イベントキューは消去されます。 | **イベントキューは消去されます。 | ||
**[[llSensorRepeat|Repeating sensors]] はリリースされます。 | **[[llSensorRepeat/ja|Repeating sensors]] はリリースされます。 | ||
**The [[llSetTimerEvent|timer event clock]] はクリア'''されません。'''(訳注:イベント発生までの経過時間も引き継がれます) | **The [[llSetTimerEvent/ja|timer event clock]] はクリア'''されません。'''(訳注:イベント発生までの経過時間も引き継がれます) | ||
*''default'' stateはほかのstateに行く前に定義すべきです。 | *''default'' stateはほかのstateに行く前に定義すべきです。 | ||
*state範囲内にユーザ関数、あるいはユーザ変数を設定することはできず、 イベントだけがstate範囲内で定義できます。 | *state範囲内にユーザ関数、あるいはユーザ変数を設定することはできず、 イベントだけがstate範囲内で定義できます。 |
Revision as of 01:05, 16 June 2009
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が存在する場合は実行され、イベントキューは消去されます。
- targetにstateが変わると、全てのlistenは解除されます。
- target stateにstate_entryが存在する場合は実行されます。
もしtarget state が現在のstateと同じ場合、stateは変わらず、またどんな作用もありません。 つまり、state 現在のステート;によって、state_entryを再実行することは出来ません。
2009年6月16日、強調部分の誤訳を修正 RoyalTurkey Markstein
注意点
- stateを変える上で
- 全てのlistenはリリースされます。
- イベントキューは消去されます。
- Repeating sensors はリリースされます。
- The timer event clock はクリアされません。(訳注:イベント発生までの経過時間も引き継がれます)
- default stateはほかのstateに行く前に定義すべきです。
- state範囲内にユーザ関数、あるいはユーザ変数を設定することはできず、 イベントだけがstate範囲内で定義できます。
サンプル
default { touch_start(integer a) { state hello; } } state hello { state_entry() { llOwnerSay("Hello"); state default; } state_exit() { llOwnerSay("Goodbye"); } }
参考情報