Timing beim zeichnen in Direct2D

Meldur

Erfahrenes Mitglied
Hallo,

so langsam blicke ich durch, wie Direct2D (ich nutze es über ShardDX in C#) funktioniert aber der Groschen ist noch nicht gefallen, wie ich leistungsunabhängige Berechnungen durchführen kann? Wenn ich zeichne, so sind die wird in Abhängigkeit von der Rechenleistung gezeichnet - Mehr Power = schnelleres Zeichnen. Die Berechnungen die zu den Zeichenergebnissen führen (z.B. etwas Physik) sollen nun aber in festen Zyklen erfolgen. Wenn ich sie in einem Hintergrundthread laufen lasse, sieht es nicht so schön gleichmäßig aus.
Gibt es eine Möglichkeit zu sagen "pro FrameWIEDERGABE führe eine Berechnung aus"? Eine Wiederholrate von 200 Frames kann ja ohnehin niemand sehen.
Ziel ist es also, dass alle Animationen auf allen Rechnern gleich schnell laufen.

Danke,
Meldur
 

ComFreek

Mod | @comfreek
Moderator
Hallo Meldur,


da gibt es eine ziemlich einfache Lösung: du berechnest für jedes Ergebnis noch zwei Faktoren hinein: a) die vergangene Zeit seit der letzten Berechnung in Millisekunden, b) Schritte/Meter/Pixel per Millisekunde

Beispiel (hier in C++-Syntax):
C++:
void move(float delta) {
  // movesPerMS gibt die Schritte o.Ä. per Millisekunde an
  const float movesPerMS = 0.5;

  float someNewVal = x * movesPerMS * delta;
}

void render() {
  // Render the game
}

void loop() {
  // Game loop
  static DWORD lastTime = GetTickCount();
  DWORD now = GetTickCount();
  float delta = now - lastTime;
  lastTime = now;

  move(delta);
  render();
}
 

Neue Beiträge