2008年03月01日
walking のスクリプティング講座2(その3)
さ~ さっさと翼やってしまおう
前にも書いたけど 角度が違うだけで 後は皆同じだから 片方の翼(実際には翼の根元のボールに入れたスクリプトだけど)だけ見てみる
この辺は変数の定義とか初期化
変数は定義してからじゃないと使えないんだ
まあ その方が読みやすいからいいと思うよ
というのは別の話で w
open_rot とか close_rot とかいうのは 開いた時の翼の角度と 閉じた時の翼の角度
invisible_rot というのは 翼を見えなくしている時の翼の角度
飛んでない時は見えなくしてるんだけど そのままの角度にしていたら 見えなくても クリックをブロックしてしまうので 他の人の迷惑だし 自分でも自分の翼をクリックしてしまってやっかい
角度を変えていたら多少はまし... 大きさ変えればいいのかなと試してみて うまくいかなかったな なんでだろ w
後は オブジェクト間通信のチャネルと メッセージの文字列を保持するための変数
さて 処理部分も さっさと片付けてしまおう w
最初に実行される場所
ここで 角度 と メッセージの文字列を設定している
角度は 編集 で翼の角度を変えながら その角度をメモして こんな風にすると設定できる ちょっと面倒だけど w
メッセージの文字列は 前に書いたように 所有者の ID を含ませるようにしてる
で wing_channel を llListen させる
そうそう ここは後で追加した部分だけど 装着する時に 飛んでいるかどうかで 見えるようにするかどうか変えないといけない
制御部は片方の翼に入れているので 制御部なしで 別の翼が付けられる場合があるからね
後 制御部と翼のスクリプトは別々のプリムに入ってないとだめみたいだったな そんな気がしただけ? あはは
さて これで最後
wing_channel にメッセージが来るとここにくる
そこでメッセージの種類を調べて それぞれのメッセージに対する実際の処理を行えばいいんだ
角度を変えるのは llSetLocalRot
見えるようにしたり見えないようにするのは llSetLinkAlpha
で OK だね
というわけで 今回は あっさり ここで お終い!!
前にも書いたけど 角度が違うだけで 後は皆同じだから 片方の翼(実際には翼の根元のボールに入れたスクリプトだけど)だけ見てみる
//
// File: Wing_L.lsl
// Date Author number of nodes
// 2007/9/9 walkinglint 34
// 2007/9/7 walkinglint 22
// 2007/9/7 walkinglint 18 (Wing_R->Wing_L)
// 2007/9/7 walkinglint 18
// 2007/9/5 walkinglint 32
// 2007/9/5 walkinglint 15 (Wing->Wing_R)
// 2007/9/2 walkinglint 15
//
rotation open_rot;
rotation close_rot;
rotation invisible_rot;
integer is_open = FALSE;
integer wing_channel = 283;
string id_str;
string open_str;
string close_str;
string visible_str;
string invisible_str;
この辺は変数の定義とか初期化
変数は定義してからじゃないと使えないんだ
まあ その方が読みやすいからいいと思うよ
というのは別の話で w
open_rot とか close_rot とかいうのは 開いた時の翼の角度と 閉じた時の翼の角度
invisible_rot というのは 翼を見えなくしている時の翼の角度
飛んでない時は見えなくしてるんだけど そのままの角度にしていたら 見えなくても クリックをブロックしてしまうので 他の人の迷惑だし 自分でも自分の翼をクリックしてしまってやっかい
角度を変えていたら多少はまし... 大きさ変えればいいのかなと試してみて うまくいかなかったな なんでだろ w
後は オブジェクト間通信のチャネルと メッセージの文字列を保持するための変数
さて 処理部分も さっさと片付けてしまおう w
default {
on_rez(integer param) {
close_rot = llEuler2Rot(<199.25 * DEG_TO_RAD, 74.55 * DEG_TO_RAD, 157.30 * DEG_TO_RAD>);
open_rot = llEuler2Rot(<107.45 * DEG_TO_RAD, 32.95 * DEG_TO_RAD, 257.45 * DEG_TO_RAD>);
invisible_rot = llEuler2Rot(<360.0 * DEG_TO_RAD, 0.0 * DEG_TO_RAD, 300.0 * DEG_TO_RAD>);
id_str = llGetOwner();
open_str = id_str + "open";
close_str = id_str + "close";
visible_str = id_str + "visible";
invisible_str = id_str + "invisible";
llListen(wing_channel, "", "", "");
}
最初に実行される場所
ここで 角度 と メッセージの文字列を設定している
角度は 編集 で翼の角度を変えながら その角度をメモして こんな風にすると設定できる ちょっと面倒だけど w
メッセージの文字列は 前に書いたように 所有者の ID を含ませるようにしてる
で wing_channel を llListen させる
attach(key avid) {
integer status = llGetAgentInfo(llGetOwner());
if (status & AGENT_FLYING) {
llSetLinkAlpha(LINK_SET, 1.0, ALL_SIDES);
} else {
llSetLinkAlpha(LINK_SET, 0.0, ALL_SIDES);
}
}
そうそう ここは後で追加した部分だけど 装着する時に 飛んでいるかどうかで 見えるようにするかどうか変えないといけない
制御部は片方の翼に入れているので 制御部なしで 別の翼が付けられる場合があるからね
後 制御部と翼のスクリプトは別々のプリムに入ってないとだめみたいだったな そんな気がしただけ? あはは
listen(integer channel, string name, key id_str, string message) {
if (message == open_str) {
llSetLocalRot(open_rot);
} else if (message == close_str) {
llSetLocalRot(close_rot);
} else if (message == visible_str) {
llSetLinkAlpha(LINK_SET, 1.0, ALL_SIDES);
} else if (message == invisible_str) {
llSetLinkAlpha(LINK_SET, 0.0, ALL_SIDES);
llSetLocalRot(invisible_rot);
}
}
}
さて これで最後
wing_channel にメッセージが来るとここにくる
そこでメッセージの種類を調べて それぞれのメッセージに対する実際の処理を行えばいいんだ
角度を変えるのは llSetLocalRot
見えるようにしたり見えないようにするのは llSetLinkAlpha
で OK だね
というわけで 今回は あっさり ここで お終い!!
Posted by walkinglint at 16:10│Comments(0)
│walking のスクリプティング講座