2008年08月29日

アニメーション後、停止処理をしなくても大丈夫ですか?

こんにちは。
いま作っているスクリプトで、オブジェクトをアタッチするとアニメーションさせて、取り外したときにアニメーションを停止させる処理をしています。
ところが、取り外した時の処理で、アニメを20個ぐらい停止させると、処理が間に合わなくて、全部停止しきれない状態でスクリプトがイベントリーの中で眠ります。

その状態でそのスクリプト(入りのオブジェクト)を他の人(Aさんとします)に渡して、Aさんが装着すると、眠った状態のスクリプトから再開されるので、アニメ停止処理が実行されて「パーミッション無いよ」ってエラーになってしまいます。

そこで、取り外すときにアニメ停止処理を止めることにしました。
アニメ停止処理しなくても問題ないでしょうか。

試した結果としては、取り外すとアニメが停止されるので支障は無いように思うのですが、でも不安です。

※変数を保存しておきたいので、スクリプトはリセットしない仕様です。

以上、よろしくお願い致します。


同じカテゴリー(スクリプト関連)の記事画像
オブジェクトのリンクとタッチで開く扉
自動チャットを止めたい
テレポートするとアニメーションが解除される
同じカテゴリー(スクリプト関連)の記事
 テクスチェンジのHUDについて (2015-07-01 04:51)
 モール用のプリムカウンターを探しています (2014-11-29 20:09)
 連続するアニメーションの処理 (2014-08-24 03:23)
 オブジェクトの上にフローティングテキストを出す。 (2014-08-22 16:46)
 チャットログの盗聴について (2014-02-03 03:43)
 椅子に座った後で位置調整できるスクリプト (2013-03-24 16:37)

Posted by msn  at 09:49 │Comments(5)スクリプト関連

この記事へのコメント
とりあえず、エラーを回避するなら
llGetPermissions( )とかllGetPermissionsKey()とかで、
パーミッションのチェックをしながら停止処理をするのも手です。
※その分、停止処理に時間かかると思います。

ただ、個人的には
一人のAVに対して、20個のアニメを
同時に再生している状態というのが
ピンとこないです。
もし、可能なら、この状態を再検討してみてはいかがでしょうか。
Posted by you Xiao at 2008年08月29日 20:17
>ささぴさんへ

この部分についてですが
>アニメーションですが、オブジェクトに仕込んだアニメーションを
>デタッチ(ストップ処理無し)すれば、
>自動的にアニメーションは停止します。

アニメ付の椅子などで立ち上がるとアニメは止まったりします。
 (llunsitや「STAND UP」ボタンなど)
ただし、座ったままテレポートとかすると
テレポート先でもアニメは再生されたままになったりしますよね?
→このことから、アニメ再生源から離れても
 アニメの停止は保証されていないと考えていました。

detachの場合は、前者と同じ動作になるということでしょうか?
できれば、参考になるurlを教えていただけないでしょうか。

#このあたりの動作の保証になるような資料が
#なかなか見つからずにいつも悩みます。
#何パターンかの実験を何度か繰り返したり
#友達の経験を聞いたりして、
#「こういうことにしておこう」とケリをつけるんですが
#「偶然そういう結果になっただけでは?」という思いが消えず
#モヤモヤしたままとか...
Posted by you Xiao at 2008年08月30日 05:48
>ささぴさんへ
実験してはるとは...
マメだ。
LSLはどんどん成長していくので、
言語仕様書とかリファレンス作るのも難しいのかもしれませんね。

どうも特殊な場合をのぞいて、そのままdetachでもよさそうですね。
※これが「お行儀」の問題かどうか微妙ですが。
Posted by you Xiao at 2008年08月30日 10:23
Q。アニメ停止処理しなくても問題ないでしょうか?

経過理由1)
>>処理が間に合わなくて、全部停止しきれない状態でスクリプトがイベントリーの中で眠ります。 

確かにそうですよね^^ いつ・どこで止まるんだろう?ていう点が疑問ですね^^

>>眠った状態のスクリプトから再開されるので、アニメ停止処理が実行されて「パーミッション無いよ」ってエラーになってしまいます。 

※変数を保存しておきたいので、スクリプトはリセットしない仕様です。
リセットしないでも上手に動作手順が正しければ、 問題ないはずだと想像しますが、

on_rez( のイベント発生と、 attach( のイベントは競合して 同時に発生する可能性はあります
デタッチしましたという判定の会話llSay( も次回にアタッチしたときに発生することもありました

【検証すべき?課題?】
スクリプトの処理が休止して、持ち物に保管されるタイミングについては、あまり考えたこともなかったですね^^
処理するべき関数が長い場合では最後まで実施される保証がないと思います、 でもどこかで勝手に休止になるわけだから、 それがどこであるか? という問題ですね、(今回のあにめで検証できても いろんな場面で結果が異なりそうです。)

attach( 関数で デタッチされた場合は結果を取得できますが、 上記理由からただちにスクリプトは停止することになります。
長い時間の掛かるスクリプト処理は実施できない可能性があると当然推測されます。

1つのあにめの停止なら 問題なく動作すると思いますが 20個ほどの処理を実施する時間が保障されてないと 推測します(できなかったというのが今回の質問ですね)

デタッチした後に そのオブジェクトのスクリプトが、いつまでも動作していること自体が不自然なことだからです、でもスクリプト書けないんじゃ困ったことになりそうですね^^;

http://wiki.secondlife.com/wiki/LSL_Delay/ja
LSL関数の動作にも 遅延が発生します。 基本0.05秒だそうです。
プログラムだから実行するのに時間がかかるのは当然だと思われるでしょう、しかし実際に掛かるのでしかたないよ^^という時間ではなく、ビューアーがわざと遅らせていると受け止めたほうが、理解しやすいかもしれません。
遅延とかエネルギも物理などの動作に影響するものがあるようです、

ビューアーはもっと様々な処理をしないといけないので、もっと優先すべき処理をするとか、SIMに負荷の大きいスクリプト関数の処理には優先順位を低くするような構成がルールとしてされているものです。


【改善・対応ぷらん】
従って、デタッチで確認してからすべての終了処理を長々とするのではなく、
商品の使用の終了しますか?という確認作業の中で、すべてのアニメの停止をする作業を、事前にどこかに組み込むことが良いと思います


http://wiki.secondlife.com/wiki/Category:LSL_Events/ja
また、上記から今回の問題点ではないかもしれませんが、イベントの発生とスクリプトとかステートなどのスクリプトの書き方の手順でも、ルール仕様があります、スクリプトの書き方が動作に影響する可能性もあります、ユーザーの望んでいる動作が実施できないことも良くある点です、

イベントは互いに中断しませんが、処理されるよりも発生するほうがもし多ければ、
FIFOというキュー方式ストックして貯めておきます、しかし、ステート変更でイベントキューは消去され、幾つかのlistenは自動的に除去されます。touchも自動的に除去されるようです。
しかし 時間タイマに関するイベントは、ステートが変化しても必ず発生することが基本となっています。


検証^^実験まではできませんでしたので^^ 妄想だけのレポートです^^
Posted by スクリプト? at 2008年08月30日 22:09
おはよございます。
休み中、ネットに繋げられなくてご返信遅くなってしまい大変申し訳ございません。
皆様からの貴重な書き込み、大変感謝しています。本当にありがとうございます!!


---------------------------------------------
you Xiaoさんへ
コメントありがとうございます!
座ったときのアニメなどは、また違う問題があるんだと知りました。
椅子を作るときに参考にさせていただきます。


---------------------------------------------
ささぴさんへ
実験までして頂き、本当にありがとうございます!!
ささぴさんのご意見を聞いて安心しました。
取り外すときは、アニメ停止処理をやめることにしました。
安心&スッキリしました!!

説明不足点がありましたので、補足します。
20個のアニメと言うのは、ささぴ さんのおっしゃる通り個別の稼動箇所アニメなのですが、同時に動いていると言うわけではありません。
1個の時もあれば、10個の時もあります。
同時に動かしたい場合もあるので
 >>新たなアニメーションをスタートする前に現在のアニメーションをストップ
と言うのも使うことができませんでした。

ただ、止める時は20個すべてをループで止めています。
1個ずつ「動いてる?」のチェックは、さらに処理が遅くなると思ったからです。

説明不足ですみませんでした。


---------------------------------------------
スクリプト?さんへ
参考のリンク大変勉強になりました!!
いろいろ読めば読むほど、新たな疑問が浮かんできそうです・・。
ステート変更でいろいろと自動的に除去されるのですね。
ガベージコレクションみたいに不要物は自分で明示的に除去したくなっちゃうけど、LSLは親切?にできているのですね。
Posted by msn at 2008年09月01日 09:09
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。