::mayukoの小ネタ イベントって?

   
  

 投稿者 ::mayuko

イベントとは、端的にいってしまえば
スクリプトのトリガー(きっかけ)
スタートのスイッチのようなものです。

こちらでLSLはイベント駆動型
と書きましたが、イベントを全く作らないLSLスクリプトは
どうなるかというと、何にも行わないスクリプトとなってしまいます。
*実際のところイベントを全く含まずにスクリプトをコンパイル
しようとするとエラーとなりコンパイルできません><

イベントとして使えるトリガーは
ステート開始がトリガーのstate_entry
タッチする事がトリガーのtouch
物を装着でのattach、オブジェクトに変化があったときの
changed、などなど20種類くらいあります。

イベントには引数(ひきすうと読みます)が付くものがほとんどで
イベントの引数にはそのイベントが起きた事によって取得できた
値が入って渡されます。

例えばtouch( integer num_detected )には、
タッチイベントがおきて、そのときに検知した数がint型で
渡されると読み取れます。
attach( key id )には
アタッチイベントがおきて、そのときに検知したキーが渡されると
読むことが出来ます。
まあ、アタッチというのはアバターが何かを装着したときの
イベントなので自然と
あ、アバターのUUIDが入るんだな?と気が付くわけですw

ですからそのイベントが起きたことをトリガーに
何かをさせると同時に
引数に入った値で、その値から何かを取得したり
条件分岐をさせたりとかそういう風にスクリプトの
おおまかな中身を作って書いていったりします。

かんたん翻訳機では
このようなイベントを使用しています。
わかりやすいようにイベント以外は文章で書いてみますね:)

on_rez(integer start_param)
	{
rezされたイベントスタート!
イベントの引数は使用せず、リセットさせる。
	}
state_entry()
	{
ステートが始まったとき、リセットされたときのイベントスタート!
オーナーのUUIDを取ってグローバル変数に代入
	}
touch_start(integer total_number)
	{
タッチされたイベントスタート!
dialogの為のリスンチャンネル500番を開き
グローバル変数に入ったオーナーのみの言葉を聴く。
dialogを開く。
	}
listen(integer channel, string name, key id, string message)
	{
言葉を聴いたイベントスタート!
もしも(引数のチャンネル番号が500だったら){
dialog用のリスンチャンネルを閉じて
メッセージに入った文字列がリスト型のボタンの何番目なのか探して
その番号と同じ番号のもの文字列方グローバル変数に代入して
リスンチャンネル7番を開きます。
	}しかし、もしも(引数のチャンネル番号が7だったら){
リスンチャンネル7番を閉じて
言葉をURLエンコードして
HTTP接続を生成URLにしてください!キーを設定します。
		}
	}
http_response(key request_id, integer status, list metadata, string body)
	{
生成URLの接続を設定したキーが戻ってきたらのイベントスタート!
	もしも(そのHTTP接続は成功との引数ならば){
"translatedText"という言葉を取得できたWEBページの文字列から
何番目にあるか番号で出してもらい。
"responseDetails"という言葉を取得できたWEBページの文字列から
何番目にあるか番号で出してもらい。
番号と番号に挟まれた文字列だけをさらに抽出して
このオブジェクトのオーナーにしゃべります。
	}ちがければ{
このオブジェクトのオーナー接続で失敗したHTTPの引数の番号しゃべります。
		}
	}
}

と条件分岐のところまで文章で書いてしまいましたが
こんな感じの流れのスクリプトということになります。

次はここで話題が出ちゃったので次は条件分岐のことを書いてみたいと思います:)



関連する投稿


セカンドライフ土地レンタルのSLingトップへ戻る

Leave a Reply

You must be logged in to post a comment.