Difference between revisions of "状態"

From Second Life Wiki
Jump to navigation Jump to search
m
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)にあり, プログラマーによって定義された仕組みにしたがってイベントや入力に反応しようとする. しかし, スクリプトは二つ以上の状態をもつことができ, どの状態にいるかにより, イベントや入力に対して異なった反応をする.
LSLでは、ほとんどのスクリプトは何らかの入力を受け取るか、環境で何らかの変化を検出するまで、アイドル状態にあります。どの瞬間も、スクリプトは何らかのstateにあり、プログラマーによって定義された多くのスキームと一致したイベント、あるいはインプットに反応するでしょう。しかしながら、スクリプトは二つ以上の異なるstateを包含することができ、状態によってイベントやインプットに対して異なる反応をします。


主たる状態はdefault状態である. When a script is compiled, reset or loaded, this is the state it enters by default. After the default state definition can follow additional state definitions which the script may use to change how and which events are handled.
中心的なstateはdefault stateです。スクリプトはコンパイルされた時、リセットもしくはリロードされた時、defaultのstateから入ります。default stateの定義の後に、スクリプトでイベントが処理されることを、どのようにそしてどの変更で使用するのか定義しているstateを、続けて追加することができます。
{{#vardefine:name|state
{{#vardefine:name|state
}}{{#vardefine:p_jump_state_desc|name of a state to run
}}{{#vardefine:p_jump_state_desc|実行するstate名です。
}}{{#vardefine:p_label_state_desc|state name
}}{{#vardefine:p_label_state_desc|state名です。
}}{{#vardefine:p_events_desc|one or more {{LSLGC|Events|events}}
}}{{#vardefine:p_events_desc|一つ以上の {{LSLGC|Events|イベント}}です。
}}{{#vardefine:header_title|default { {{LSL Param|events}} }
}}{{#vardefine:header_title|default { {{LSL Param|events}} }
}}{{#vardefine:header_text|{{{!}}
}}{{#vardefine:header_text|{{{!}}
{{LSL DefineRow|event|events|{{#var:p_events_desc}}}}
{{LSL DefineRow|event|events|{{#var:p_events_desc}}}}
{{!}}}
{{!}}}
The default state definition.
default state の定義です。
}}{{#vardefine:constants_nb|
}}{{#vardefine:constants_nb|
<div id="box">
<div id="box">
Line 22: Line 22:
{{LSL DefineRow|event|events|{{#var:p_events_desc}}}}
{{LSL DefineRow|event|events|{{#var:p_events_desc}}}}
{{!}}}
{{!}}}
'''target''' state definition.
'''target''' state の定義です。
</div>
</div>
</div>
</div>
Line 33: Line 33:
{{LSL DefineRow|label|target|{{#var:p_jump_state_desc}}}}
{{LSL DefineRow|label|target|{{#var:p_jump_state_desc}}}}
{{!}}}<br/>
{{!}}}<br/>
When a ''state target;'' is encountered at runtime, if the ''current'' state and the ''target'' state are different:
''state target;''が実行時にぶつかったとき、''現在'' のstate と ''target'' state が異なる場合
#Trigger [[state_exit]] in the current state if it exists and clear the event queue.
#現在のstate内で[[state_exit]]が実行する場合、現在のstateは終了し、イベントキューは消去されます。
#Change state to ''target'', any [[listen]]s are unregistered.
#Change state to ''target'', any [[listen]]s are unregistered.
#Trigger [[state_entry]] in the ''target'' state if it exists.
#Trigger [[state_entry]] in the ''target'' state if it exists.

Revision as of 06:09, 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. Change state to target, any listens are unregistered.
  3. Trigger state_entry in the target state if it exists.

If target state is the same as the current state, no state change occurs nor do any of the side effects.

Caveats

  • On state change:
    • All listens are released.
    • The event queue is cleared
  • The default state must be defined before all others.
  • States cannot have user functions or variables inside their immediate scope, only event definitions may be inside a states scope.

Examples

default
{
    touch_start(integer a)
    {
        state hello;
    }
}

state hello
{
    state_entry()
    {
        llOwnerSay("Hello");
        state default;
    }
    state_exit()
    {
        llOwnerSay("Goodbye");
    }
}

See Also

Keywords

•  jump
•  return

Events

•  state_entry
•  state_exit