ソラマメブログ

2008年03月01日

walking のスクリプティング講座2(その2)

制御部からいってみよ~
//
// File: Wing_C.lsl
// Date Author number of nodes
// 2007/9/9 walkinglint 22
// 2007/9/7 walkinglint 12
// 2007/9/7 walkinglint 32 (Wing_R->Wing_C)
// 2007/9/5 walkinglint 32
// 2007/9/5 walkinglint 15 (Wing->Wing_R)
// 2007/9/2 walkinglint 15
//
integer is_open = FALSE;
integer is_flying = FALSE;
integer wing_channel = 283;

制御部は各翼に対し 開け とか 閉じろ とかいう指令を出す部分

is_open というのは 開いているかどうか という状態を示してるんだけど

LSL には state の機能があるので それ使ってもいいんだけどね~

それ使って作るのは 宿題にしとこうって 誰に対する w

そうそう is_flying っていうのは 飛んでいるかどうか という状態を示してる

飛んでいる時だけ翼を表示するために使ってるんだ(あ 後 飛んでない時は じゃまにならないように下に向けるようにしてる)

後 wing_channel というのは オブジェクト間通信するためのチャネルを定義してる

左右別々のオブジェクトにしてるんだ 1つのオブジェクトにすることもできると思うんだけど なんだかうまくいかなかったんだよな~ < てきと~ w

283 は 翼 だ < てきと~ w
-----
今回は 前回のようにひっぱらないで さっさとかたづけちゃうぞ w
string id_str;
default {
on_rez(integer param) {
llSetTimerEvent(1.0);
id_str = llGetOwner();
}

最初にここを実行する

1秒毎に timer を起動するようにして id_str という所に所有者の ID を記録している

オブジェクト間通信を行う時に たまたま近くに 同じ翼を付けている人がいると シンクロしちゃうという問題を避けるために メッセージに 所有者の ID をつけることにしたんだ

そのための変数
    timer() {
integer status = llGetAgentInfo(llGetOwner());
if (status & AGENT_FLYING) {
if (is_flying == FALSE) {
llSay(wing_channel, id_str + "visible");
is_flying = TRUE;
}
if (is_open == FALSE) {
is_open = TRUE;
llSay(wing_channel, id_str + "open");
} else {
is_open = FALSE;
llSay(wing_channel, id_str + "close");
}
} else {
if (is_flying == TRUE) {
llSay(wing_channel, id_str + "invisible");
is_flying = FALSE;
}
}
}
}

でもって 1秒毎に実行される timer だけど

llGetAgentInfo というのはアバターの状態を調べる関数

AGENT_FLYING というのとアンドを取ると飛んでいるかどうかが分かる

飛んでいたら その前まで飛んでいなかったら 翼を見えるようにして 翼が閉じていたら 開いて 開いていたら 閉じる

これを 1秒毎にするわけなんで 翼がぱたぱたするわけだ w

飛んでいなかったら その前まで飛んでいたら 翼を見えないようにする

これで 翼は飛んでいるときだけ表示されるのだ < わっかるかな~ まあ 普通分かるな w

とさっと書いたけど 見えるようにする とか 開く とかいうのは 見えるようにしろ とか 開け とかいう指示を出すってことね

オブジェクト間通信とか言ってたけど なんのことはない チャネルを決めて llSay すればよいのだ

llRegionSay 使えばリージョン中に届かせることもできるじょ 音楽の URL を設定するやつは それ 使ってたな...

(続く)

同じカテゴリー(walking のスクリプティング講座)の記事
 プロフィール写真の表示に問題 (2009-11-30 20:55)
 ミニ太陽系 (2009-03-21 06:03)
 関数から文字列を返したら何か問題になる? (2009-03-18 18:02)
 llListFindList って型って関係ないんだったっけ (2009-03-18 14:02)
 夏時間(PDT)の実験 (2009-03-08 22:04)
 15パズルの作り方(その3) (2009-03-08 06:03)
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。