[aide] Alpha Fade

Répondre
Partager Rechercher
Bonjour
je suis legerement coincer dans un ptit script, donc si vous avez le ptit coup de pouce michi ^^

Alors voici la situation:
Disons que j ai 2 boite,
Une boite Noir et derriere elle une boite blanche, Je veux jouer avec la boite noir pour faire son alpha disparaitre puis pause 15s puis revenir visible et pause 15s et reproduire tout sa a l infini.

Donc moi ce que j ai fais sa fais le fading mais sa ne fais aucune pause j ai essayer de metre ma pause a plusieurs endroit et j ai echouer.
Voici se que j ai pour le moment:


float f_alpha = 0.0;
float f_step = 0.01;

default {
on_rez(integer start_param)
{llResetScript();}
state_entry()
{llSetTimerEvent(0.05);}
timer()
{f_alpha += f_step;
if (f_alpha+f_step > 1.0) {f_step = -f_step;}
if (f_alpha+f_step < 0.0) {f_step = -f_step;}
llSetAlpha(f_alpha,2);
}
}
  • Scénario :

    Répéter :
    Alpha 0 -> 1 progressif
    Pause 15s
    Alpha 1 -> 0 progressif
    Pause 15s

  • Théorie :
Soit f la fonction transparence que tu appliques. Soit t le paramètre temps.
Soit T1 le temps de passage de l'alpha 0 à l'alpha 1.

Soit T2 le temps de pause.

Soit T3 le temps de passage de l'alpha 1 à l'alpha 0.
On a

f(t) = t / T1 si 0 <= t < T1
f(t) = 1 si T1 <= t < T1 + T3
f(t) = 1-t/T2 si T1+T3 <= t < T1+T3+T2
f(t) = 0 si T1+T3+T2 <= t < T1+T3+T2+T2
sachant que t est modulo T1+T3+T2+T2 on met un test :

if( t >= T1+T3+2*T2 ) t = 0;


Ensuite il faut savoir faire passer le temps, visiblement tu sais le faire.



T'as plus qu'à écrire les lignes qui vont avec ça.




  • Pratique :
float T1 = 15.0; // T1 en sec
float T2 = 15.0; // T2 en sec
float T3 = 15.0; // T3 en sec
float timeUnit = 0.1; // unité de temps en sec

float gt;


// Ecrire la fonction f :

// utiliser T1,T2 et T3.

float f( float t)

{
....
return ....;

}



// Faire passer le temps



default
{
state_entry()
{ llSetTimerEvent(timeUnit); }
timer()
{
gt += timeUnit;
// Gestion du modulo (mieux de le placer dans le codage de f) :

if(gt >= T1+T3+2*T2 ) gt = 0;
llSetAlpha( f(gt), 2);

}

}
Hello, voici le script que j'ai écrit il y a quelque temps et qu'il le fait
Il y a beaucoup de commentaires parce que c'est un full perm que je vend.
Pour ajouter un délai de 15 secondes entre chaque loop il faut que tu changes la ligne

Code:
if (nAlpha > .9 || nAlpha < .1) bIncrease = !bIncrease;
par

Code:
if (nAlpha > .9 || nAlpha < .1) 
{
    bIncrease = !bIncrease;
    llSleep(15);
}
Code original
Code:
// current alpha (1 = 100%)
float nAlpha = 1;
// face to apply fade
integer nFace;

default
{
    state_entry()
    {
        // face to fade the texture (0 to 7 or more for other prims)
        // ALL_SIDES for all sides
        nFace = ALL_SIDES;
        
        // create an infinite loop
        integer bIncrease = FALSE;
        while (5 < 7)   // always TRUE
        {
            // decrement
            if (!bIncrease) nAlpha -= .1;
            else nAlpha += .1;
            }
            // check maximum and minimum and reverse the direction
            if (nAlpha > .9 || nAlpha < .1) bIncrease = !bIncrease;
            // set alpha to the good face
            llSetAlpha(nAlpha, nFace);
            
            // little delay between each loop in seconds
            llSleep(.05);
        }
    }
}
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés