Frage

Nach der Arbeit für eine Weile die Entwicklung von spielen, habe ich ausgesetzt war, sowohl variable frame-raten (wo man herausfinden, wie viel Zeit vergangen ist, seit die Letzte tick und aktualisieren Schauspieler Bewegung entsprechend) und Feste Bildrate (wo Sie arbeiten, wie viel Zeit vergangen ist, und wählen Sie entweder zu ticken einer festgelegten Zeit oder zu schlafen, bis das nächste Fenster kommt).

Welche Methode funktioniert am besten für bestimmte Situationen?Bitte beachten Sie:

  • Catering für verschiedene system-Spezifikationen;
  • Einfache Entwicklung/Wartung;
  • Einfache portieren;
  • Final performance.
War es hilfreich?

Lösung

Es scheint, dass die meisten 3D-Entwickler bevorzugen, variable FPS:die Quake, Doom und Unreal-engines sowohl scale-up und unten basierend auf die system-performance.

  • Zumindest haben Sie zum Ausgleich für allzu schnellen frame-raten (im Gegensatz zu den 80 's games running in the 90' s, viel zu schnell)
  • Ihr main-Schleife sollten parametrisiert werden durch den Zeitschritt jedenfalls, und solange es nicht allzu lange, eine anständige integrator wie RK4 sollten, behandeln Sie die Physik reibungslos Einige Arten der animation (Keyframes sprites) könnte ein Schmerz sein, um zu parametrisieren.Netzwerk-code wird intelligent als auch, um zu vermeiden, Spieler, die mit Maschinen schneller Schießen zu viele Kugeln zum Beispiel, aber diese Art der Drosselung wird die getan werden müssen, für die Kompensierung der Latenz sowieso (die animation-Parametrisierung helfen würde, verstecken Netzwerk-lag zu)
  • Der timing-code wird geändert werden müssen, für jede Plattform, aber es ist eine kleine lokalisierte ändern (obwohl einige Systeme ermöglichen extrem genaue timing schwierig, Windows, Mac, Linux scheinen ok)
  • Variable frame-raten erlauben für maximale Leistung.Feste Frameraten ermöglichen konsistente Leistung, aber nie erreichen wird max auf allen Systemen (das scheint zu sein, ein show-stopper für jedes ernsthafte Spiel)

Wenn Sie schreiben einen vernetzten 3D-Spiel, wo es um performance geht ich würde sagen, beißen Sie die Kugel und implementieren variable frame-raten.

Wenn es ist ein 2D-puzzle-Spiel, Sie können sich wahrscheinlich Weg mit einer festen frame-rate, die vielleicht etwas parametrisierte für super slow Computer und nächsten Jahre-Modelle.

Andere Tipps

Ich lehne mich gegen eine variable framerate-Modell, intern aber einige Systeme aktiviert sind, auf einem festen Zeitschritt.Dies ist ganz einfach durch die Verwendung eines Zeit-Akkumulator.Physik ist ein system, das am besten führen Sie auf einen festen Zeitschritt, und getickt mehrere Male pro frame, wenn notwendig, zu vermeiden, ein Verlust an Stabilität und halten die simulation glatt.

Ein bisschen code, um zeigen die Verwendung eines Akkumulators:

const float STEP = 60.f / 1000.f;
float accumulator = 0.f;

void Update(float delta)
{
    accumulator += delta;

    while(accumulator > STEP)
    {
        Simulate(STEP);
        accumulator -= STEP;
    }
}

Dies ist nicht perfekt mit allen Mitteln, aber stellt die grundlegende Idee, - es gibt viele Möglichkeiten, um zu verbessern, die auf diesem Modell.Offensichtlich gibt es Probleme aussortiert werden, wenn der Eingabe-framerate ist unverschämt langsam.Aber der große Vorteil ist, dass, egal wie schnell oder langsam das delta ist die simulation bewegt sich in eine glatte rate in "Spieler-Zeit" - das ist, wo Probleme wahrgenommen werden, die durch den Benutzer.

Generell gehe ich nicht in die Grafik-und audio-Seite der Dinge, aber ich glaube nicht, dass Sie betroffen sind, so viel wie Physik, Eingabe und Netzwerk-code.

Eine option, die ich, als user, würde gerne mehr sehen, oft ist dynamisch ändern des level-of-detail (im weitesten Sinne, nicht nur die technischen Sinn), wenn Frameraten variieren, die außerhalb des ein bestimmter Umschlag.Wenn Sie das Rendern mit 5FPS, dann schalten Sie bump-mapping.Wenn Sie das rendering zu 90 Bilder pro Sekunde, erhöhen Sie die Glocken und Trillerpfeifen ein bisschen, und gibt dem Benutzer einige schönere Bilder zu verschwenden, die Ihre CPU und GPU.

Wenn richtig gemacht, sollte der Nutzer zu erhalten die beste experince aus dem Spiel heraus, ohne dass Sie den Bildschirm Einstellungen und optimieren sich selbst, und sollten Sie sich sorgen machen, weniger, als ein level-designer, über die Sie die Anzahl der Polygone, die auf Unterschied-Szenen.

Natürlich, das sage ich als Nutzer von spielen, und nicht ernst zu -- ich habe nie versucht zu schreiben, eine nicht-triviale Spiel.

Das Haupt-problem, das ich gestoßen bin, mit variabler Länge, die frame-Zeiten ist die Gleitkomma-Präzision, und variable frame-Zeiten kann Sie überraschen, wie Sie einen beißen.

Wenn, zum Beispiel, Sie sind das hinzufügen der frame-Zeit * Geschwindigkeit bis zu einer position und der frame-Zeit wird sehr klein, und die position ist große, Ihre Objekte, die kann verlangsamen oder stoppen, bewegen, da alle Ihre delta war verloren wegen der Präzision.Sie können kompensieren Sie diese mit einem separaten Akku-Fehler, aber es ist ein Schmerz.

Mit festen (oder zumindest eine untere Schranke für die frame-Länge) frame-Zeiten können Sie Steuern, wie viel FP Fehler, die Sie berücksichtigen müssen.

Meine Erfahrung ist ziemlich begrenzt, um etwas einfache Spiele (entwickelt mit SDL und C++), aber ich habe gefunden, dass es ganz einfach nur zu implementieren einer statischen frame-rate.Sind Sie die Arbeit mit 2d-oder 3d-Spiele?Ich würde davon ausgehen, dass mehr komplexe 3d-Umgebungen profitieren würden, mehr von einer Variablen Bildrate und dass die Schwierigkeiten größer wäre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top