Aus der FAQ: Korrekte Spielgeschwindigkeit



  • Hallo zusammen

    In der FAQ hats folgenden Beitrag um die korrekte Spielgeschwindigkeit auf allen Computern zu erhalten:

    long  position_x = 0; 
    long  zeit; 
    float unterschied; 
    float position_x_rechnen = 0; 
    float faktor; 
    
    for(;;) 
    { 
        zeit = Hole_Millisekunden(); 
        Rendere_das_Bild(); 
        unterschied = Hole_Millisekunden() - zeit; 
        // Beispiel für 10 px/s nach rechts... 
        faktor = 0.001 * unterschied; 
        position_x_rechnen += 10 * faktor; 
        position_x = Runde_auf_oder_ab(position_x_rechnen); 
    }
    

    Meine Frage hierzu:
    nehmen wir an, es werden 7ms für einen arbeitsschritt benötigt. unterschied=7. somit ist faktor=0.007. position_x_rechnen wird dann ja immer abgerundet??

    cu



  • nehmen wir an, es werden 7ms für einen arbeitsschritt benötigt. unterschied=7. somit ist faktor=0.007. position_x_rechnen wird dann ja immer abgerundet??

    auf 0 abgerundet hätte ich dazuschreiben sollen...



  • Ich persönlich arbeite dann grundsätzlich immer mit float- oder double-Variablen.
    Auf- bzw. Abrunden geschehen dann nur beim Zeichnen, zumindest bei 2D-Grafik mit DirectDraw (bei Direct3D ist das ja was anderes).



  • besten dank, jetzt klappts 👍

    nur hab ich irgendwie das gefühl, dass alles nicht mehr ganz so flüssig läuft... so ein enorm leichtes stocken in der bewegung.


Anmelden zum Antworten