Difference between revisions of "状態"

From Second Life Wiki
Jump to navigation Jump to search
Line 33: Line 33:
{{LSL DefineRow|label|target|{{#var:p_jump_state_desc}}}}
{{LSL DefineRow|label|target|{{#var:p_jump_state_desc}}}}
{{!}}}<br/>
{{!}}}<br/>
''state target;''が実行時にぶつかったとき、''現在'' のstate と ''target'' state が異なる場合
''state target;''が実行時に発生し、''現在'' のstate と ''target'' state が異なる場合、以下の順に動作します。
#現在のstate内で[[state_exit]]が実行する場合、現在のstateは終了し、イベントキューは消去されます。
#現在のstate内に[[state_exit]]が'''存在する場合は実行され、'''イベントキューは消去されます。
#''target''にstateが変わると、全ての[[listen]]は解除されます。
#''target''にstateが変わると、'''全ての'''[[listen]]は解除されます。
#''target'' stateの[[state_entry]]が実行された場合、''target'' stateは
#''target'' stateに[[state_entry]]'''存在する場合は実行されます。'''
終了します。
 
もし''target'' state が''現在''のstateと同じ場合、stateを変えることもいくつかの効果をだすこともできないわけではありません。
もし''target'' state が''現在''のstateと同じ場合、'''stateは変わらず、またどんな作用もありません。'''
つまり、state ''現在のステート'';によって、[[state_entry]]を再実行することは出来ません。
 
2009年6月16日、強調部分の誤訳を修正 RoyalTurkey Markstein
</div>
</div>
</div>
</div>
Line 66: Line 69:
}}{{#vardefine:notes|
}}{{#vardefine:notes|
}}{{#vardefine:caveats|*stateを変える上で
}}{{#vardefine:caveats|*stateを変える上で
**全ての[[listen]]はリリースされます。
**全ての[[llListen|listen]]はリリースされます。
**イベントキューは消去されます。
**イベントキューは消去されます。
**[[llSensorRepeat|Repeating sensors]] はリリースされます。
**The [[llSetTimerEvent|timer event clock]] はクリア'''されません。'''(訳注:イベント発生までの経過時間も引き継がれます)
*''default'' stateはほかのstateに行く前に定義すべきです。  
*''default'' stateはほかのstateに行く前に定義すべきです。  
*state範囲内にユーザ関数、あるいはユーザ変数を設定することはできず、 イベントだけがstate範囲内で定義できるでしょう。
*state範囲内にユーザ関数、あるいはユーザ変数を設定することはできず、 イベントだけがstate範囲内で定義できます。
}}{{#vardefine:helpers|
}}{{#vardefine:helpers|
}}{{#vardefine:also_header|<h3>キーワード</h3>
}}{{#vardefine:also_header|<h3>キーワード</h3>

Revision as of 00:53, 16 June 2009

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存在する場合は実行され、イベントキューは消去されます。
  2. targetにstateが変わると、全てのlistenは解除されます。
  3. 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");
    }
}

参考情報

キーワード

•  jump
•  return

イベント

•  state_entry
•  state_exit