Difference between revisions of "状態"
Jump to navigation
Jump to search
Asuka Neely (talk | contribs) m |
Asuka Neely (talk | contribs) |
||
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の定義の後に、スクリプトでイベントが処理されることを、どのようにそしてどの変更で使用するのか定義しているstateを、続けて追加することができます。 | 中心的なstateはdefault stateです。スクリプトはコンパイルされた時、リセットもしくはリロードされた時、defaultのstateから入ります。default stateの定義の後に、スクリプトでイベントが処理されることを、どのようにそしてどの変更で使用するのか定義しているstateを、続けて追加することができます。 | ||
Line 35: | Line 35: | ||
''state target;''が実行時にぶつかったとき、''現在'' のstate と ''target'' state が異なる場合 | ''state target;''が実行時にぶつかったとき、''現在'' のstate と ''target'' state が異なる場合 | ||
#現在のstate内で[[state_exit]]が実行する場合、現在のstateは終了し、イベントキューは消去されます。 | #現在のstate内で[[state_exit]]が実行する場合、現在のstateは終了し、イベントキューは消去されます。 | ||
# | #''target''にstateが変わると、いくつかの[[listen]]は解除されます。 | ||
# | #''target'' stateの[[state_entry]]が実行された場合、''target'' stateは | ||
終了します。 | |||
もし''target'' state が''現在''のstateと同じ場合、stateを変えることもいくつかの効果をだすこともできないわけではありません。 | |||
</div> | </div> | ||
</div> | </div> | ||
Line 64: | Line 65: | ||
</pre> | </pre> | ||
}}{{#vardefine:notes| | }}{{#vardefine:notes| | ||
}}{{#vardefine:caveats|* | }}{{#vardefine:caveats|*stateを変える上で | ||
** | **全ての[[listen]]はリリースされます。 | ||
** | **イベントキューは消去されます。 | ||
* | *''default'' stateはほかのstateに行く前に定義すべきです。 | ||
* | *state範囲内にユーザ関数、あるいはユーザ変数を設定することはできず、 イベントだけがstate範囲内で定義できるでしょう。 | ||
}}{{#vardefine:helpers| | }}{{#vardefine:helpers| | ||
}}{{#vardefine:also_header|<h3> | }}{{#vardefine:also_header|<h3>キーワード</h3> | ||
{{{!}} | {{{!}} | ||
{{LSL DefineRow||[[jump]]|}} | {{LSL DefineRow||[[jump/ja|jump]]|}} | ||
{{LSL DefineRow||[[return]]|}} | {{LSL DefineRow||[[return/ja|return]]|}} | ||
{{!}}} | {{!}}} | ||
}}{{#vardefine:also_footer| | }}{{#vardefine:also_footer| | ||
}}{{#vardefine:also_functions| | }}{{#vardefine:also_functions| | ||
}}{{#vardefine:also_events| | }}{{#vardefine:also_events| | ||
{{LSL DefineRow||[[state_entry]]|}} | {{LSL DefineRow||[[state_entry/ja|state_entry]]|}} | ||
{{LSL DefineRow||[[state_exit]]|}} | {{LSL DefineRow||[[state_exit/ja|state_exit]]|}} | ||
}}{{#vardefine:also_articles| | }}{{#vardefine:also_articles| | ||
}}{{#vardefine:also_tests| | }}{{#vardefine:also_tests| | ||
}}{{#vardefine:location| | }}{{#vardefine:location| | ||
}}{{LSL Generic}}{{LSLC|Flow Control|3={{#var:lang}}}}{{LSLC|Script|3={{#var:lang}}}} | }}{{LSL Generic/ja}}{{LSLC|Flow Control|3={{#var:lang}}}}{{LSLC|Script|3={{#var:lang}}}} |
Revision as of 13:11, 1 January 2008
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"); } }
参考情報