smooth animations



  • hallo,

    ich habe ein kleines Problem.. und zwar benutze ich animierte Sprites die ich per getTickCount in der geschwindigkeit begrenze

    if (abs(GetTickCount() - m_dwLastAnimationCount) >= movementspeed)   {
            m_dwLastAnimationCount = GetTickCount();
            countAnimations=true;
        }
        else {
            countAnimations=false;
        }
    
    ....
    ....
    
        if(countAnimations==true) {
            clouds_x--;
    
            if(clouds_x==-801) {
                clouds_x=0;
            }
        }
    

    mit diesem "Code" bewege ich Wolken über das Bild.. alles läuft smooth.. aber die wolken laufen nicht langsam über das Bild.. sondern sie zuckeln. Kann man nicht langsam animieren ohne das es ruckelig aussieht??

    Danke für eure Hilfe!



  • clouds_x wird immer um 1 verringert. Das ist zu viel. Du musst ne Kommazahl nehmen.
    Dann aber auch nicht
    if(clouds_x==-801) sondern if(clouds_x<=-801).



  • ai caramba .. ich bin so..

    du hast Recht.. ich hatte das vorher schonmal ausprobiert, habe aber kein float gehabt.

    vielen Dank!!



  • hmmmm.. da habe ich dann doch noch ein Problem.

    die Draw() Funktion erwartet eine Variable vom Typ RECT... RECT besteht aus 4 int's.

    ich schiebe die Wolken links ausm Bild und pappe das was links außerhalb ist Rechts wieder ran. Damit sich das immer wieder loopt.
    Wenn ich jetzt mit 0.2 erhöhe.. damit die Wolken smooth scrollen, dann muss ich ja auch 0.2 an das RECT übergeben, damit es Rechts wieder ordentlich drangeblittet werden kann. Da RECT aber nur int ist, ensteht ein schwarzer dünner Balken der mit übers Bild wandert.

    Wie kann ich das umgehen?!
    😕



  • Das liegt vielleicht daran, wie du rundest! Du solltest entweder alle floats aufrunden oder alle abrunden!



  • m_sprite->Draw(m_texture_clouds, NULL, NULL, NULL, 0.0f, &D3DXVECTOR2(800+clouds_x,0), 0xFFFFFFFF);
    

    800 + -0.1

    daran liegt es. er macht aus der Rechnung kein Float.. obwohl D3DXVECTOR2 eigentlich 2 Float als Parameter hat?!

    [ Dieser Beitrag wurde am 22.01.2003 um 23:55 Uhr von personenkult editiert. ]



  • Wenn du literale Konstanten benutzt, die floats sein sollen, dann musst du das auch so schreiben:
    http://www.mathematik.uni-marburg.de/~cpp/literale_konstanten/

    Bye, TGGC



  • m_sprite->Draw(m_texture_clouds, NULL, NULL, NULL, 0.0f, &D3DXVECTOR2(800.0f+clouds_x,0), 0xFFFFFFFF);
    
    clouds_x-=0.2f;
    

    meinst du das so?!
    bring aber auch nichts..

    [ Dieser Beitrag wurde am 23.01.2003 um 12:16 Uhr von personenkult editiert. ]



  • der Layer ist eh etwas am zittern.. aber nur am Ende und am Anfang. Ich denke das ist der Grund, wieso da ein schwarzer Balken entsteht beim zusammenblitten. Obwohl ich den Layer mit 0.2f pixel per durchlauf über das Bild bewege, ist er am Anfang und Ende nicht smooth. Wenn man den Layer im gesamten betrachtet, dann ist er smooth.
    Peil ich nicht..


Anmelden zum Antworten