Difference between revisions of "状態"

From Second Life Wiki
Jump to navigation Jump to search
m
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を包含することができ、状態によってイベントやインプットに対して異なる反応をします。
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は終了し、イベントキューは消去されます。
#Change state to ''target'', any [[listen]]s are unregistered.
#''target''にstateが変わると、いくつかの[[listen]]は解除されます。
#Trigger [[state_entry]] in the ''target'' state if it exists.
#''target'' stateの[[state_entry]]が実行された場合、''target'' stateは
If ''target'' state is the same as the ''current'' state, no state change occurs nor do any of the side effects.
終了します。
もし''target'' state ''現在''のstateと同じ場合、stateを変えることもいくつかの効果をだすこともできないわけではありません。
</div>
</div>
</div>
</div>
Line 64: Line 65:
</pre>
</pre>
}}{{#vardefine:notes|
}}{{#vardefine:notes|
}}{{#vardefine:caveats|*On state change:
}}{{#vardefine:caveats|*stateを変える上で
**All [[listen]]s are released.
**全ての[[listen]]はリリースされます。
**The event queue is cleared
**イベントキューは消去されます。
*The ''default'' state must be defined before all others.
*''default'' stateはほかのstateに行く前に定義すべきです。
*States cannot have user functions or variables inside their immediate scope, only event definitions may be inside a states scope.
*state範囲内にユーザ関数、あるいはユーザ変数を設定することはできず、 イベントだけがstate範囲内で定義できるでしょう。
}}{{#vardefine:helpers|
}}{{#vardefine:helpers|
}}{{#vardefine:also_header|<h3>Keywords</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では、ほとんどのスクリプトは何らかの入力を受け取るか、環境で何らかの変化を検出するまで、アイドル状態にあります。どの瞬間も、スクリプトは何らかのstateにあり、プログラマーによって定義された多くのスキームと一致したイベント、あるいはインプットに反応するでしょう。しかしながら、スクリプトは二つ以上の異なるstateを包含することができ、状態によってイベントやインプットに対して異なる反応があります。

中心的なstateはdefault stateです。スクリプトはコンパイルされた時、リセットもしくはリロードされた時、defaultのstateから入ります。default stateの定義の後に、スクリプトでイベントが処理されることを、どのようにそしてどの変更で使用するのか定義しているstateを、続けて追加することができます。

default { events }

default { events }
• event events 一つ以上の イベントです。

default state の定義です。

state target { events }

• label target state名です。
• event events 一つ以上の イベントです。

target state の定義です。

|- |

state target;

• label target 実行するstate名です。

state target;が実行時にぶつかったとき、現在 のstate と target state が異なる場合

  1. 現在のstate内でstate_exitが実行する場合、現在のstateは終了し、イベントキューは消去されます。
  2. targetにstateが変わると、いくつかのlistenは解除されます。
  3. 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");
    }
}

参考情報

キーワード

•  jump
•  return

イベント

•  state_entry
•  state_exit