2010年04月09日
装備オブ内のアニメが誰かにタッチされると起動するスクリプト
こんにちは☆
Google検索で結局情報を得られず、こちらに質問をさせて頂きます>< どなたかお詳しい方の貴重なアドバイス頂けたら本当に嬉しいです。。。
お尋ねしたいことはスクリプトのことなのですが、こういったことをしたいのです。
Aさんが装備しているオブジェクトの中にアニメファイルとスクリプトを仕込んであり、BさんやCさんなど不特定多数の誰でも、Aさんが装備しているそのオブジェクトをタッチすることで、そのオブジェクト内に仕込まれているアニメーションが起動されることがしたいのです。。
アニメーションを止めるために以下のように、2タイプのバリエーションが知りたいです。一つのスクリプトでいずれも兼ねる必要はございません。
①アニメーションが1回再生し終わると、元のデフォルト状態の姿勢に戻るタイプと、
②アニメーションが延々繰り返されるタイプ(再度オブジェクトをタッチするまでアニメは停止しない。※停止権限はAさん自身でも誰でも停止することが出来る)
お詳しい方のアドバイス、どうかよろしくお願いいたします (o^^o)
momoko
Google検索で結局情報を得られず、こちらに質問をさせて頂きます>< どなたかお詳しい方の貴重なアドバイス頂けたら本当に嬉しいです。。。
お尋ねしたいことはスクリプトのことなのですが、こういったことをしたいのです。
Aさんが装備しているオブジェクトの中にアニメファイルとスクリプトを仕込んであり、BさんやCさんなど不特定多数の誰でも、Aさんが装備しているそのオブジェクトをタッチすることで、そのオブジェクト内に仕込まれているアニメーションが起動されることがしたいのです。。
アニメーションを止めるために以下のように、2タイプのバリエーションが知りたいです。一つのスクリプトでいずれも兼ねる必要はございません。
①アニメーションが1回再生し終わると、元のデフォルト状態の姿勢に戻るタイプと、
②アニメーションが延々繰り返されるタイプ(再度オブジェクトをタッチするまでアニメは停止しない。※停止権限はAさん自身でも誰でも停止することが出来る)
お詳しい方のアドバイス、どうかよろしくお願いいたします (o^^o)
momoko
テクスチェンジのHUDについて
モール用のプリムカウンターを探しています
連続するアニメーションの処理
オブジェクトの上にフローティングテキストを出す。
チャットログの盗聴について
椅子に座った後で位置調整できるスクリプト
モール用のプリムカウンターを探しています
連続するアニメーションの処理
オブジェクトの上にフローティングテキストを出す。
チャットログの盗聴について
椅子に座った後で位置調整できるスクリプト
attach
アタッチされたなら
パーミッション要求
touch_start
アタッチされているなら
アニメーションを再生する
②のタイプなら、
touchイベントでそのアニメーションが再生中かどうか調べて、再生中なら停止、再生していなければ再生する。
基本的にこれだけなんですが、どの辺がわからないですか?
②はtimer使えばよかですね
ループ設定されているアニメを使用するのであれば、再生1回の長さを計っておいて、再生してからその秒数経ったら止めるくらいしか思いつかないな…。
-----------------------
確認1
「Aさんが装着しているアイテムをBさんやCさんがタッチすると・・・」
case1-1:Aさんがアニメーションする
case1-2:BさんやCさんがアニメーションする
-----------------------
case1の場合、ん?さんが仰っている流れでOKだと思います。
case2の場合↓
-----------------------
確認2
「Bさんがアニメしているところに、Cさんがタッチすると・・・」
case2-1:Bさんのアニメが停止して、Cさんがアニメを開始する
case2-2:Bさんに続いてCさんもアニメを開始する
-----------------------
case2-1ならば、一度Bさんのアニメを停止させてから、新しくCさんのパーミッションを取り直してアニメを再生させます。
case2-2の場合、アニメーションさせたい人数分のアニメ再生スクリプトが必要になります。(例>5人同時にアニメさせたいなら5個)
-----------------------
アニメの繰り返しは、アニメーションファイル自身に設定しますので、アップロード時にループ設定を行って下さい。
ループするアニメならば、一度開始すれば停止命令を出すまで何度も繰り返します。
②の場合は、アニメーションの制御は最後にパーミッションを取得したアバターに対して発動します。
ですから、どんな仕様で作成されるにせよ、多人数のダンスボールないしその類似品を作成される場合は、権限を取得済みのアバターの情報を何らかの形で管理しておく必要があります。
たとえば、要するに模式的には以下の様な事になります。
list agentListにアバターのキーを保存・削除しています。
市販の多人数用のダンス装置は、当然はるかに高度ですが、基本的な構造は同じです。
(たとえば、下はこのままでは、タッチしてアニメーションが開始されたアバターがアニメを停止(=2回目のタッチ)せずに他のSIMなどにいってしまった場合に、agentListに当人の情報が残ってしまいますので、そのうちメモリーが足りなくなってスクリプトは実行を停止するでしょう。)
// www.lsleditor.org by Alphons van der Heijden (SL: Alphons Jano)
list agentList;
default
{
touch_start(integer total_number)
{
//パーミッションを要求する。
llRequestPermissions(llDetectedKey(0),PERMISSION_TRIGGER_ANIMATION);
}
run_time_permissions(integer perms)
{
if (perms & PERMISSION_TRIGGER_ANIMATION)
{
//パーミッションが取れたアバターのキーを取得する。
key k=llGetPermissionsKey();
//タッチしたアバターのキーがリストにあるか探す
integer i=llListFindList(agentList,(list)k);
if (i==-1)
{
//いなかった
//再生開始。
llStartAnimation("turn_180");
//再生を開始したアバターのキーをリストに登録する。
agentList=agentList+k;
}
else
{
//いた。何かする。
//例)アニメーションを停止してリストから削除する
llStopAnimation("turn_180");
agentList=llDeleteSubList(agentList,i,i);
}
}
}
}
消せないみたいなので、忘れてください、上は間違いです。失礼致しました。
アドバイスをしてくださったみなさん、本当にどうもありがとうございました☆