2012-03-23 7 views
0

Ich benutze ein Timing-System, wo ich Delta (die Anzahl der Millisekunden, die jedes Bild, 60 fps) passiert.Wie verwende ich Delta-Millisekunden, um alle x Millisekunden etwas zu tun?

Bevor ich Timing verwendet, zählte ich die Rahmen und tat etwas wie folgt aus:

if(frames % 60 == 0) /*do something*/; 
frames++; 

Aber ich kann nicht die gleiche Sache mit Delta verwenden:

if(milliseconds % 1000 == 0) /*do something*/; 
milliseconds += delta; 

Delta ändert sich jedes Mal, und Millisekunden werden nicht genau ein Vielfaches von 1000 pro Sekunde sein.

(Ich bin mit Java, aber das ist nicht wirklich relevant.)

Edit:

Die if (Millisekunden - prev_milliseconds> = 1000) von Stas Makutin zum größten Teil funktioniert. Aber in einem Teil meines Codes, gibt es so etwas wie diese:

if(frames % 60 == 0){ 
    ... 
} 
if(frames % 60 == 30){ 
    ... 
} 

if(frames % 40 == 0){ 
    ... 
} 

Gibt es eine Möglichkeit, dies zu tun, ohne prev_millisecond1, prev_millisecond2 usw.

Antwort

0

Wahrscheinlich etwas (dh mehrere prev_millisecond Variablen.) wie dies funktionieren wird:

prev_milliseconds = 0; 

... 

if (milliseconds - prev_milliseconds >= 1000) 
{ 
    /* do somthing */ 
    prev_milliseconds = milliseconds; 
} 
milliseconds += delta; 

Aber wenn Ihr Code noch nach jedem Rahmen löst, warum nicht Zählung Rahmen und verwenden Sie Ihre alten Code fortsetzen?

+0

Ich habe nur Frames gezählt, aber ich wollte genaueres Timing hinzufügen (weil mein Programm auf verschiedenen Computern mit unterschiedlichen Geschwindigkeiten läuft). Die Geschwindigkeit, mit der sich alle Objekte bewegen, war früher Pixel/Frames, aber jetzt ändere ich alles auf Pixel/Sekunden. – user1221546