2008年06月19日

オブジェクトが透明に・・


どうも!新米クリエイターのナイです
もう、わからないことばかりでぐつぐつ煮詰まっています。たすけてくださいな
当面のの問題は・・
制作したオブジェクトをクリックすると透明になってしまいます。
再度、クリックすると再表示されるのですが・・
玄人いわくそう設定されているとのこと・・
これを解除するにはどうすれびいいんでしょうか?
おしえてくださいな・・・
よろしくおねがいします。



Posted by nai  at 18:16 │Comments(9)TrackBack(0)オブジェクト関連

この記事へのトラックバックURL

http://oshiete.slmame.com/t278404

この記事へのコメント
追記・・
どうやら搭載してるスクリプトに原因があるようです。
クリックすると透明になちゃうよ!と指定してあるみたいなんですが
その設定を外すところがわかりません。
だれかくわしいたおしえてください。
Posted by nainai at 2008年06月19日 18:44
llSetAlpha()のところを消せば取りあえず透明にはならなくなります。
「クリックすると透明」ごと消して良いなら
touch_start
{
・・・・
}
を消せば良いけど、透明になる以外の処理もしてるなら消しちゃだめ。
差し支えなければスクリプトも載せると、もっと的確なお答えのレスが付くと思います^^
Posted by hoge at 2008年06月19日 19:35
レスありがとうです

一応、スクリプトのせてみます
なにせ・・はじめたばりでわからず
ひろってきたものに変更を加えたものですので
いみがわからないんです

integer hidden = FALSE;

default
{
state_entry()
{
llSitTarget(<0.0, 0.0,0.6>, ZERO_ROTATION);
llSetSitText("AFK!");
}

changed(integer change)
{
if(change & CHANGED_LINK)
{
key avataronsittarget = llAvatarOnSitTarget();
if( avataronsittarget != NULL_KEY )
{
if ((llGetPermissions() & PERMISSION_TRIGGER_ANIMATION) && llGetPermissionsKey() == avataronsittarget) {
llStopAnimation("sit");
llStartAnimation("Dance");
} else {
llRequestPermissions(avataronsittarget, PERMISSION_TRIGGER_ANIMATION);
}
}
}
}

run_time_permissions(integer perm)123
{
if(perm)
{
llStopAnimation("sit");
llStartAnimation("Dance");
}
}

touch_start(integer total_number)
{
if(hidden)
{
hidden = FALSE;
llSetLinkAlpha(LINK_SET,1,ALL_SIDES);
}
else
{
hidden = TRUE;
llSetLinkAlpha(LINK_SET,0,ALL_SIDES);
}
}
}

よろしくおねがいしますm(_ _)m
Posted by nainai at 2008年06月19日 20:00
touch_start(integer total_number)
{
if(hidden) <ここから
{
hidden = FALSE;
llSetLinkAlpha(LINK_SET,1,ALL_SIDES);
}
else
{
hidden = TRUE;
llSetLinkAlpha(LINK_SET,0,ALL_SIDES);
} <ここまで
}  
}

上の「ここから」と「ここまで」の間を消せば、タッチで透明度が変化することはなくなります。 

いきなり消すのが怖ければ、

//if(hidden)
//{
//hidden = FALSE;
...

のように各行の先頭に//と書くことによっても無効化できます。
Posted by YooYoo at 2008年06月19日 21:00
えーっと補足します。
上で示した範囲ですが、行単位で消してくださいね。
つまり、最初の行でいうと、if(hidden){全部削除です。
Posted by YooYoo at 2008年06月19日 21:02
有り難うございますm(_ _)m
解決しました
本当にたすかったですぅ
Posted by nainai at 2008年06月19日 21:06
提示されたスクリプトにコメントを入れてみました。これでどのように動いているか分かると思います。

//==============================================================
integer hidden = FALSE; // 隠しているフラグ

default
{
state_entry()
{
llSitTarget(<0.0, 0.0, 0.6>, ZERO_ROTATION); // アバターが座ったときの位置と回転の指定
llSetSitText("AFK!"); // パイメニューのSitの設定
}

changed(integer change) // チェンジイベント
{
if(change & CHANGED_LINK) // オブジェクトのリンクに変化があった場合→アバターが座ったor立った
{
key avataronsittarget = llAvatarOnSitTarget(); // 座っているアバターのキー取得(立ち上がった場合はNULL_KEYとなる)
if(avataronsittarget != NULL_KEY) // アバターのキーがNULL_KEYではない場合=座った
{
if ((llGetPermissions() & PERMISSION_TRIGGER_ANIMATION) && llGetPermissionsKey() == avataronsittarget) // 現在保持しているパーミッションがアニメーションで、それは座っているアバターのキーと同じ場合→座っているアバターのアニメーションのパーミッションを保持している
{
llStopAnimation("sit"); // アニメーションの停止
llStartAnimation("Dance"); // アニメーションの開始
}
else // アバターのキーがNULL_KEYの場合=立った
{
llRequestPermissions(avataronsittarget, PERMISSION_TRIGGER_ANIMATION); // 座ったアバターにパーミッション要求
}
}
// ここに立ったときのアニメーションを停止する処理を入れる(後述)
}
}

run_time_permissions(integer perm) // パーミッション要求の応答イベント
{
if(perm) // なんらかのパーミッションが取得できている場合
// if(perm & PERMISSION_TRIGGER_ANIMATION) // ↑より正確な比較式

{
llStopAnimation("sit"); // アニメーションの停止
llStartAnimation("Dance"); // アニメーションの開始
}
}

touch_start(integer total_number) // タッチ開始イベント
{
if(hidden) // 隠しているフラグがTRUEの場合→隠している状態
{
hidden = FALSE; // 隠しているフラグの変更
llSetLinkAlpha(LINK_SET, 1.0, ALL_SIDES); // リンクしているプリムの全面を非透明にする
}
else //
{
hidden = TRUE; // 隠しているフラグ変更
llSetLinkAlpha(LINK_SET, 0.0, ALL_SIDES); // リンクしているプリムの全面を透明にする
}
}
}
//==============================================================

まず、タッチしてプリムを透明/非透明にしているので、ご希望の動作をさせたいならtouch_startイベントごと削除すれば可能です。

ここで気になる点ですが、このスクリプトを入れたオブジェクトにアバターが座ってDanceを始めるわけですが、立ち上がってもダンスし続けてませんか?
(アニメーションの優先度の設定にもよります)
その場合は、if(avataronsittarget != NULL_KEY)に対になるように(コメント参照)
else
{
llStopAnimation("Dance");
}
を入れれば立ち上がるとDanceは停止します。

さらに、オリジナルではタッチすればオブジェクト(きっとダンスボール系のもの)が消えるようになって、見た目もすっきりすることを意図しているのだと思いますが、タッチしなくてもアバターが座ったら消える、立ったら現れるようにするには、それぞれDanceを開始している後に、タッチイベントの中で使っているllSetLinkAlpha関数を入れてやれば出来ます。
Posted by ささぴささぴ at 2008年06月20日 11:51
わぉ!
これは凄い!
凄く参考になります。

ご伝授有り難うございますm(_ _)m

なにせ、セカンドライフははじめて一週間くらいなもので
さらにこんなスクリプトは触ったこともないので
何が何だかめがまわっます。
これでどうなってるのかわかりました。

もともと、拾ってきたモノに変更をくわえてるだけなので
こちらの意図した通りにうごいてくれなくて
こまってました。

これから上記のものは穴の開くほど見つめて
スクリプトの変更させていただきます。

本当にあっりがとうございました(゚゚)(。。)ペコッ
Posted by nai at 2008年06月20日 12:32
ごめんなさい、コメントを間違えて書いてしまいました。

else // アバターのキーがNULL_KEYの場合=立った

の部分は

else // パーミッションを持っていない場合

でした
Posted by ささぴ at 2008年06月20日 17:13