Funktion um variable von 1.0 auf 0.0 und zurück



  • Hallo zusammen,
    ich bin gerade dabei ein Blending in Animationen zu tun,damit sie etwas weicher in einander verlaufen.
    Dafür wollte ich eine Funktion schreiben,die bei veränderung der sequenc die blend variable einmal in 0.01 schritten auf 0.0 bringt und dan wieder mit 0.01 Schritten auf 1.0.Dadurch kann man quasie eine stärke der Animation einstellen.

    Das Problemm ist,dass das iwie hiermit nicht geht,bzw. das Program nicht weitergeht(es wird gestartet und das wars auch):

    if(character_animation_blendkey=1)
    		{
    			while(character_animation_blend !=0.0)
    			{
    				character_animation_blend=character_animation_blend-0.01;
    			}
    			if(character_animation_blend==0.0)
    			{
    				while(character_animation_blend !=1.0)
    			{
    				character_animation_blend=character_animation_blend+0.01;
    			}
    			}
    			character_animation_blendkey=0;
    		}
    

    Kann mir einer sagen woran das liegt,ober mit veraten wie man das etwas eleganter hinkriegt 😉

    Danke



  • while(character_animation_blendkey > 0.0)
      character_animation_blendkey -= 0.01;
    while(character_animation_blendkey < 1.0)
      character_animation_blendkey += 0.01;
    


  • Oder noch kürzer aber nicht mehr gut lesbar:

    while((character_animation_blendkey -= 0.01) > 0.0); 
    while((character_animation_blendkey += 0.01) < 1.0);
    


  • ok danke erstmal,aber ich meine man müsste das mit der Applikationszeit irgendwie machen,da das ja währen 100 Schleifendurchgängen passieren soll,und nicht in einem schritt.



  • Dann erhöhst/verringerst du den Wert jedes Frame um einen, von der FPS-Zahl abhängigen, Wert.



  • kann man das nicht einfach mit einem sinus wer machen,also eine parabell daraus bilden,die den Scheitel 0 hat und den x wet per Frame weitergeben?



  • Na klar aber da bekommst du andere Werte, denn gezeigtes ist eine Dreieckswelle.



  • Ich meine z.b eine Parabell mit y=x²+1 startet bei y = 1 und dan guckt man wo es wieder y=1 hat und verändert dazu den x wert immer.



  • Noch eine Frage:Gibt es eine Funktion oder sowas,die ein Befehl nur einmal ausführt oder ein "impuls" gibt ,sowas wie KeyDown(dauer) und KeyHit(ein kurzer Impuls)

    Danke


Anmelden zum Antworten