ステート
まずはプリムを作って「新しいスクリプト」で出来たスクリプトの内容を見て欲しい
default{
state_entry(){
llSay(0, "Hello, Avatar!");
}
touch_start(integer total_number){
llSay(0, "Touched.");
}
}
この中の何にも包まれてないdefaultっていうのがステートのことだ
defaultに包まれてるstate_entryとtouch_startが
イベントだってのはもうわかるな
defaultってのはLSLを動かした時に始めに実行されるステートのこと
そもそもステートって何?
いい感じの説明が思い浮かばなかったからイメージでつかんでくれ
ファミコンの1コンと2コンがあるよな
1コンを持っていれば1コンのAボタンとか十時ボタンを押せるけど
2コンのボタンは操作できない
2コン側に移動すれば2コンのボタンは操作できるけど1コンのボタンは操作できない
これと似たようなもんで
ステート1にいるとステート1の中のイベントは動作するけどステート2のイベントは動作しない
ステート2へ移動するとステート2の中のイベントは動作するけど今度はステート1のイベントが動作しなくなる
まあそういうことだ
図で説明するとこんな感じ
ステートを新しく作るには
state newstate{
}
と書けばおk
ユーザが作るステートには
ステート名の前にstate って書いてやる必要がある
この中にdefaultと同じようにイベントを書いていってやればおk
state newstate{
state_entry(){
llOwnerSay("in newstate");
}
}
また、defaltからこのステートに移動したい場合は
defaltのイベントのどこかに次の命令を追加してやる必要がある
state newstate;
ためしにタッチしたらステートを移動するようにしてみよう
default{
state_entry(){
llSay(0, "Hello, Avatar!");
}
touch_start(integer total_number){
state newstate;
}
}
state newstate{
state_entry(){
llOwnerSay("in newstate");
}
}
こんな感じ
このスクリプトの場合は、ステート移動した後にタッチしても何もおこらないぞ
最終更新:2008年08月26日 02:03