ソラマメブログ
< 2024年06月 >
S M T W T F S
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            

2007年11月10日

ダンスボール(リンデンスクリプト Tips)

 クラブ等に良くあるダンスボールスクリプトを作ってみました。
ボールをタッチするとコンテンツの中にあるアニメーションをダイアログ表示し、
選んだアニメーションを実行します。
ダンスをストップするときは、ダイアログ右上の"STOP"ボタンを押します。
アニメーションは、ボールにドラッグするだけでOKです。
ダンスボール(リンデンスクリプト Tips)
<スクリプト内容>
//
//   DanceBall script   v1.1
//                                                                 
//                                       Created by Zero2000 Kid     2007/11/10
//                                                                                    2007/12/08(modified)
//                                                                          
list list_anim;
string anim;
integer handle;

getAminlist() {
       list_anim=[];
       integer i;
       integer animct = llGetInventoryNumber(INVENTORY_ANIMATION);
       for (i = 0; i < animct; i++) {
               if (i<11) list_anim+=llGetInventoryName(INVENTORY_ANIMATION,i);
       }
       list_anim+="STOP";
}

stopAnimation() {
       list anims = llGetAnimationList(llGetPermissionsKey());
       integer aminct = llGetListLength(anims);
       integer i;
       for (i = 0; i < aminct; i++){
               llStopAnimation(llList2Key(anims, i));
       }
       // add 2007/12/8  -->
       llStartAnimation("stand");
      //  <--
}

startAnimation() {
       stopAnimation();
       if (anim!="STOP") {
               llStartAnimation(anim);
       }
}

default {
       
       state_entry() {
               llSetText("Let's Dance\nClick Me!",<1,1,1>, 1.0);
               getAminlist();   
       }
       
       on_rez(integer int) {
               llResetScript(); 
       }
       
       changed(integer change){
               if (change & CHANGED_INVENTORY){
                       getAminlist();
               }
       }
       
       touch_start(integer t) {
               handle = llListen(-1,"", "","");
               llDialog(llDetectedKey(0), "PLEASE SELECT DANCE", list_anim, -1);
       }
       
       listen(integer ch, string name, key id, string message) {
               anim=message;
               if ((llGetPermissions() & PERMISSION_TRIGGER_ANIMATION) 
                                               && llGetPermissionsKey() == id) {
                       startAnimation();
               } else { 
                       llRequestPermissions(id, PERMISSION_TRIGGER_ANIMATION); 
               }
               llListenRemove(handle);
       }
       
       run_time_permissions(integer perm){ 
               if(perm & PERMISSION_TRIGGER_ANIMATION){ 
                       startAnimation();
               } 
       }
}

<スクリプトの説明>
1. アニメーションをコンテンツにドラッグするとchangedイベントが発生し、そのタイミングでアニメー
 ションの名前を取得し、リストに格納します。
2. ボールをタッチするとllListenコマンドでリッスンモードをスタートし、llDialogで、アニメのリストを
 ダイアログ表示します。
3. アニメを選択するとリッスンイベントが発生し、llRequestPermissionsでパーミションを取得した後、
  アニメーションをスタートします。

ええwかなり説明省いてます・・・いいのかこんなんでw
ちょっと時間ないのでこの辺でw


リンデンスクリプト Tips Intexへ



同じカテゴリー(リンデンスクリプトTips)の記事画像
サウンド再生スクリプト(リンデンスクリプト Tips)
カメラコントロール(リンデンスクリプト Tips)
標準時間表示スクリプト(リンデンスクリプト Tips)
プリムカウンター2(リンデンスクリプト Tips)
土地情報チェッカー(リンデンスクリプト Tips)
SIM負荷チェッカー(リンデンスクリプト Tips)
同じカテゴリー(リンデンスクリプトTips)の記事
 サウンド再生スクリプト(リンデンスクリプト Tips) (2009-12-16 20:13)
 カメラコントロール(リンデンスクリプト Tips) (2009-11-21 21:26)
 標準時間表示スクリプト(リンデンスクリプト Tips) (2009-11-02 00:34)
 プリムカウンター2(リンデンスクリプト Tips) (2009-10-12 20:40)
 土地情報チェッカー(リンデンスクリプト Tips) (2009-10-11 21:33)
 SIM負荷チェッカー(リンデンスクリプト Tips) (2009-08-09 20:26)
この記事へのコメント
はじめまして、スクリプト使わせてもらっています。
難しくって自分の力ではどうにもなりません。
少しは勉強してるつもしですが、なかなか。
以前からダンスボールがほしかったので、コピーさせてもらいました。
でも、ダンスがとまらないんです。
タイニーのダンスだからでしょうか?
ボールの上に座って立ち上がる、という方法でSTOPせているのですが、
アドバイスいたっだけるとうれしいです。
よろしくお願いします。
Posted by ロンちゃんロンちゃん at 2007年12月04日 13:06
ロンさんへ

はじめましてZEROです^^
ダイアログメニューの"STOP"を押しても止まらないと
いうことでしょうか?STOPボタンを押して、少し動くと
止まるはずなんですが。
Posted by ZEROZERO at 2007年12月05日 01:40
止まりました。
動かないといけないんですよね。
クリックして止まらないから、何回も押したりして。
ありがとうございました。
ほかの、スクリプトも使わせてもらいました。
SLで、また会えてらうれしいです。
Posted by ロンちゃん at 2007年12月07日 16:30
ロンさんへ

動かないと止まらない件ですが、私もちょっと気になったので調べてみました。llStopAnimationを発行すると、内部的にはアニメーションは実行していない状態になります。しかし、画面上は動きっぱなしですwこれは仕様なのかバグなのかよく分かりません^^;おそらく実行中のアニメーションが無の場合、以前実行していたアニメを継続するようです。
通常アバターは、普通に立っている状態(止まっている状態)でも実は内部的には、standというアニメーションを実行ています。実行中のアニメーションが何もない状態の場合、なんらかのアクションをトリガーとしてこのstandが自動的に実行されるようです。少し動くと止まるのは、このstandというアニメーションが実行された結果です。ですのでSTOPボタンを押して、すぐに止まった状態にするにはこのstandというアニメーションを実行してあげればOkのようです。スクリプトにこの処理を追加しましたのでお試しください^^
Posted by ZEROZERO at 2007年12月08日 22:56
こんばんは

このダンスボールで複数でダンスしたのですがシンクロには対応していないのでしょうか・・
同じ踊りを踊ってもタイミングがばらばらなんです^^;

どうかシンクロダンス対応にバージョンアップしてください^^
家にお友達呼んでダンスパーティしたいんです^^

よろしくおねがいします
Posted by ルイ at 2010年09月02日 23:01
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。