2007年11月22日木曜日

YazManiaSP(SuperPersonal) 1.1

(画像は本文とは全く関係なかったり・・・(笑) WindLight の陰影のチェックで・・・)


はぁ・・・ くたくたになりましたぁ、、、
なんとか作って Yaz Mania グループに配布しました、Yaz Mania Super Personal 1.1 ...

基本機能は前回ご紹介したものとあまり変わっていません。。。でも、この手のコード(スクリプト)って、結局は「エラー/例外処理」をどんどん入れていくことになるんですよね・・・

やりたいことはすぐにスクリプトで書けるけど、、、エラー処理って重要。たぶん、スクリプトの7割くらいはエラー処理、、、、(笑

ダンス玉と同じで、、、連続再生のスロット(というか、、、パーソナルなので main script only なんですが)の解放処理で、、、手こずりましたw


timer() イベントはスクリプト1つにつき、1つなわけですよね~。あとから touch して、timer の値を変えると、それ以前にタッチした人は、、、、処理されなくなっちゃうわけで。

解放のタイミングって、、、ケースバイケースなことがよくわかりました。

Yaz Mania Music Ball の場合は、曲の切り替えのときに、連続再生ボタンをタッチした Avatar の Key からその SIM に存在するかどうかをチェックして、存在しなければ解放、存在していれば次の曲・・・だったんですが、これ、問題ありありでした。
曲が3分以上なので・・・最低3分は解放されないわけです。

あと、連続再生ボタンを押して有効になっている人だけに「前へ」「次へ」「一時停止」っていうボタンがでるダイアログをつくったんですが、、、これが「一時停止」を押したまま TP したり、落ちたりしたら、、、解放されないことに気がつき・・・(笑
一時停止を押した時に、timer で30秒セットして SIM にいるかどうかのチェックをかけたりしたんですが、お風呂に入っているときに神様降臨・・・
他の人が「連続再生ボタン」を押したときに、それ以前に連続再生ボタンを押している Avatar が SIM にいるかどうかのチェックをかけて、いなかったら横取りしちゃえばいいんだ、、、、とw

なので、llSensorRepeat によるチェックは Yaz Mania では使っていませんw
逆にいうと、、、Massive Link Dance Unit なんかは10秒から20秒の感覚で llStartAnimation をかけるわけで、それだと llSensorRepeat よりも、SIM にいるかどうかのチェックを llStartAnimation の前にやってあげれば、、、解決! (のはず)
あと、、、、あまりに if の nest が多くなってきて、、、stack heap collision が出てき始めました。

そうなると、、、まだ、完全に理解していないんですが、たぶん解決方法は2つかな、、、と。
ひとつは、Massive Link Dance Unit でやったようなスクリプトを複数にわけて LinkMessage で処理する方法。
もうひとつは state をわけて、gloval 変数による if を極力少なくして、state 変更で処理をする方法。
このあたりは、Linden の wiki より、ユーザーさんがつくってきた wiki に詳しく書かれています。(英語)
http://lslwiki.net/lslwiki/wakka.php?wakka=state
まだまだ奥が深いですね。。。
やっぱり、、、NMR8 見られないのは、、、ほんと悔しい!(笑

4 件のコメント:

  1. Yaz Mania グループ、入り損ねたorz

    返信削除
  2. まず、連続再生中かそうでないかでstateをわけましょう。そして連続再生用のスクリプトを分けましょう。
    分割した連続再生用スクリプトの開始・終了をリンクメッセージでやりとりすればいいと思います。
    処理が長いならばなおさら。
    スクリプトのどこからどこまでが連続再生用に必要かよく考えて、私ならそうするなー。
    NMR8は…リンデンがちゃんと障害直してくれないと、開始できないかも…。

    返信削除
  3. ありがとうございます。Yaz玉頂戴いたしました。色もきれいで、ダイアログもわかりやすいです。

    返信削除
  4. Konp-、いつでも入会OK-
    Kioさん、その通りだわー
    Hylaさん、楽しんでねー

    返信削除