Site search

Google
WWW を検索 backup-beta.blogspot.com を検索

2008年8月24日日曜日

透明度を変更するスクリプト

今回はメガネ(サングラス)や窓ガラスなどの透明度を変更するスクリプトです^^
llSetAlphaを使います。値が0で透明になるので「不透明度」というほうがいいんですかね?www

まずタッチで切り替えの簡単なスクリプトです。値は透明のとき0.2にしました^^
// 透明・不透明切り替え
float alpha=1.0;  // 不透明度

default
{
    touch_start(integer total_number)
    {
        if (llDetectedKey(0) == llGetOwner())
        {  // オーナーがタッチしたら
            if (alpha < 0.5) alpha=1.0;  // alphaが0.5以下なら1.0に
            else alpha=0.2;  // そうでないときは0.2に
            llSetAlpha(alpha,ALL_SIDES);  // アルファを設定
        }
    }
}


でも実際はリンクして使うので、スクリプトも親プリムからメッセージを送って変更するようにしないと眼鏡レンズなどに使えないですねw


子プリムに送信するメッセージを alpha0.2 のようにして、こんな感じになりました^^
// 親プリムのスクリプト
float alpha=1.0;  // 不透明度

default
{
    touch_start(integer total_number)
    {
        if (llDetectedKey(0) == llGetOwner())
        {  // オーナーがタッチしたら
            if (alpha < 0.5) alpha=1.0;  // alphaが0.5以下なら1.0に
            else alpha=0.2;  // そうでないときは0.2に
            // リンクした子プリムにメッセージ送る
            llMessageLinked(LINK_ALL_CHILDREN,0,"alpha"+(string)alpha,"");
        }
    }
}

// 透明にする子プリムのスクリプト
default
{
    link_message(integer sender_num, integer num, string msg, key id)
    {
        if (llGetSubString(msg,0,4) == "alpha")
        {  // alphaのメッセージ受信すると
            float alpha=(float)llGetSubString(msg,5,-1);  // 数値を得る
            llSetAlpha(alpha,ALL_SIDES);  // アルファを設定
        }
    }
}

透明・不透明をタッチで切り替えるだけにしてますが、ダイアログを使うようにすれば何段階に変更とかできますね^^

0 件のコメント:

コメントを投稿