ソラマメブログ

2008年03月02日

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

次 時間版 行ってみよ~
//
// File: dance_ring_10s.lsl
// Date Author number of nodes
// 2007/10/6 walkinglint 52
// 2007/10/6 walkinglint 84 (dance_ring->dance_ring_10s)
// 2007/9/11 walkinglint 83
// 2007/9/10 walkinglint 82
//
// http://mina.slmame.com/e3291.html
// http://miz.slmame.com/e2400.html
key av_id;
integer read_line;
key query_id;
list dance_list = [];
integer i;
integer num_of_dances;
string nm;
integer dance_num = 0;
string dance_name;
list animation_list;

この辺は変わらない(あ 要らないものが入っているような気がするが 気にしないように w)
activate_load_and_animation() {
num_of_dances = llGetInventoryNumber(INVENTORY_ANIMATION);
for (i = 0; i < num_of_dances; i++) {
nm = llGetInventoryName(INVENTORY_ANIMATION, i);
dance_list = llListInsertList(dance_list, [nm], llGetListLength(dance_list));
}
animation();
}

この辺は ノートカードからアニメーションの名前を読み込むんじゃなくて 同じフォルダにあるアニメーションの名前を読み込むようにしている

まあ この辺も定式みたいなもんだから そのまま使えばいいだけ w

llGetInventoryNumber(INVENTORY_ANIMATION) をすると アニメーションの個数が取れるから

llGetInventoryName(INVENTORY_ANIMATION, i) を i を 0 から その数 - 1 まで変えながら起動すると それらの名前が取り出せるというわけ

で llListInsertList(dance_list, [nm], llGetListLength(dance_list)) みたいなことをすると nm が dance_list の最後に追加されていく

で それが終わったら animation を起動する
animation() {
dance_num = 0;
dance_name = llList2String(dance_list, dance_num);
llStartAnimation(dance_name);
llSetTimerEvent(10.0);
}

animation はリスト版と殆ど変わらない

ただ timer を起動する時間間隔が 10秒

つまり そのタイミングで アニメーションを切り替えてやるわけだね

だから 10秒に足りないアニメーションの場合は 次のアニメーションを待つことになるし 10秒を超えるアニメーションの場合は途中で切られることになってしまう

でも 案外使えなくもないんだ あはは
default {
on_rez(integer start_param) {
llSetTimerEvent(0.0);
}
attach(key avid) {
if (avid != NULL_KEY) {
llSetTimerEvent(0.0);
av_id = avid;
integer perm = llGetPermissions();
if ((perm & PERMISSION_TRIGGER_ANIMATION) == 0) {
llRequestPermissions(avid, PERMISSION_TRIGGER_ANIMATION);
} else {
activate_load_and_animation();
}
} else if (llStringLength(dance_name) != 0) {
llStopAnimation(dance_name);
}
}
run_time_permissions(integer perm) {
if (perm & PERMISSION_TRIGGER_ANIMATION) {
activate_load_and_animation();
}
}

この辺はリスト版と同じだから説明はスルー w
    timer() {
llStopAnimation(dance_name);
dance_num++;
if (dance_num == llGetListLength(dance_list)) {
dance_num = 0;
}
dance_name = llList2String(dance_list, dance_num);
llStartAnimation(dance_name);
}
}

で timer の処理だけど 起動したアニメーションを停止して 次のアニメーションを起動する というわけ...

簡単だが これで 終わり w

同じカテゴリー(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)
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。