上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
絵を飾ろうとしたんですけど・・・・・プリムをたくさん使うのヤダなっ☆
って思ったら・・・。クロスフェダーってものがあるんですよね^^
スカっと切り替わらないですけど、まったりと・・・

みなさん思い出やお気に入りの絵もたくさんあると思います。
(持ち物にもたくさんあるのではないですか?)
そんな時、使うと整理にもなるし、いいので紹介しますね。
下記のスクリプトをコンテンツ入れて、テクスも一緒にいれます。それだけ

■タイマーでテクスチャーを変更するもの
integer SIDE = 1;
integer LINK_NUMBER = 2; // Number of link of child prim.
float INCREMENT = 0.01;
float SLEEP = 0.01;
float TIME = 10.0;

integer g_iTotal;
integer g_iPosition;


makeCrossFader(integer iSide, float fDecremento, string sNewTexture)
{

//llSetLinkTexture(LINK_NUMBER, sNewTexture, SIDE);

float fAlpha = 1.0;

while(fAlpha > 0.0) {

fAlpha -= INCREMENT;

llSetAlpha(fAlpha, SIDE);
llSetLinkAlpha(LINK_NUMBER, 1.0 - fAlpha, SIDE);
llSleep(SLEEP);

} // while

llSetTexture(sNewTexture, SIDE);
llSetAlpha(1.0, SIDE);
//integer iNext = (g_iPosition + 1) % g_iTotal;
llSetLinkTexture(LINK_NUMBER, llGetInventoryName(INVENTORY_TEXTURE, g_iPosition), SIDE);

} // makeCrossFader


default {

state_entry() {

g_iTotal = llGetInventoryNumber(INVENTORY_TEXTURE);
llOwnerSay("Starting ... There are " + (string) g_iTotal + " textures");
g_iPosition = 0;
if (g_iTotal > 0) {
llSetTexture(llGetInventoryName(INVENTORY_TEXTURE, g_iPosition), SIDE);
g_iPosition = (g_iPosition + 1) % g_iTotal;
llSetLinkTexture(LINK_NUMBER, llGetInventoryName(INVENTORY_TEXTURE, g_iPosition), SIDE);
} // if
llSetTimerEvent(TIME);

} // state_entry

on_rez(integer start_param) {

llResetScript();

} // on_rez

changed(integer change) {

if (change == CHANGED_INVENTORY) {
llResetScript();
} // if

} // changed

timer() {

if (g_iTotal > 0) {

string sTexture = llGetInventoryName(INVENTORY_TEXTURE, g_iPosition);
g_iPosition = (g_iPosition + 1) % g_iTotal;

makeCrossFader(SIDE, INCREMENT, sTexture);

} else {

llOwnerSay("Not found textures in inventary");

} // if

} // timer

} // default

■タッチでテクスチャーを変更するもの
integer SIDE = 1;
integer LINK_NUMBER = 2;  // Number of link of child prim.
//float INCREMENT = 0.001; // slow
float INCREMENT = 0.01; // fast
float SLEEP = 0.01;

integer g_iTotal;
integer g_iPosition;


makeCrossFader(integer iSide, float fDecremento, string sNewTexture)
{

    //llSetLinkTexture(LINK_NUMBER, sNewTexture, SIDE);
   
    float fAlpha = 1.0;
   
    while(fAlpha > 0.0) {
       
        fAlpha -= INCREMENT;
   
        llSetAlpha(fAlpha, SIDE);
        llSetLinkAlpha(LINK_NUMBER, 1.0 - fAlpha, SIDE);
        llSleep(SLEEP);
   
    } // while
   
    llSetTexture(sNewTexture, SIDE);
    llSetAlpha(1.0, SIDE);
    //integer iNext = (g_iPosition + 1) % g_iTotal;
    llSetLinkTexture(LINK_NUMBER, llGetInventoryName(INVENTORY_TEXTURE, g_iPosition), SIDE);

} // makeCrossFader


default {

    state_entry() {

        g_iTotal = llGetInventoryNumber(INVENTORY_TEXTURE);
        llOwnerSay("Starting ... There are " + (string) g_iTotal + " textures");
        g_iPosition = 0;
        if (g_iTotal > 0) {
            llSetTexture(llGetInventoryName(INVENTORY_TEXTURE, g_iPosition), SIDE);
            g_iPosition = (g_iPosition + 1) % g_iTotal;
            llSetLinkTexture(LINK_NUMBER, llGetInventoryName(INVENTORY_TEXTURE, g_iPosition), SIDE);
           
        } // if

    } // state_entry

    on_rez(integer start_param) {

        llResetScript();

    } // on_rez

    changed(integer change) {

        if (change == CHANGED_INVENTORY) {
            llResetScript();
        } // if

    } // changed

    touch_start(integer total_number) {

        if (g_iTotal > 0) {
           
            string sTexture = llGetInventoryName(INVENTORY_TEXTURE, g_iPosition);
            g_iPosition = (g_iPosition + 1) % g_iTotal;

            makeCrossFader(SIDE, INCREMENT, sTexture);

        } else {

            llOwnerSay("Not found textures in inventary");

        } // if

    } // touch_start

} // default


今週はたくさん看板とか作る予定なので、できるだけたくさん作らないでいいような工夫を
していきたいと思います^^
スポンサーサイト

コメント

コメントの投稿

トラックバック

トラックバック URL
この記事にトラックバックする(FC2ブログユーザー)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。