Ich habe die Pausenfunktion implementiert und sie funktioniert korrekt, da sie den Player-Bildschirm dimmt und das Gameplay nicht mehr aktualisiert.
Das Problem ist, dass GameTime weiter zunimmt, während es angehalten wird. Daher wird meine Methode, die gameTime im Vergleich zu previousSpawnTime überprüft, bevor ein anderer Feind erzeugt wird, durcheinander gebracht. Wenn das Spiel zu lange angehalten wird, fällt auf, dass der nächste Feind viel zu früh zieht.
Hier ist mein Code für das feindliche Update.
private void UpdateEnemies(GameTime gameTime)
{
// Spawn a new enemy every 1.5 seconds
if (gameTime.TotalGameTime - previousSpawnTime > enemySpawnTime)
{
previousSpawnTime = gameTime.TotalGameTime;
// Add an Enemy
AddEnemy();
}
...
Ich habe auch andere Methoden, die von gameTime abhängen. Ich habe versucht, die gesamte Pausenzeit zu ermitteln und von der gesamten Spielzeit zu subtrahieren, aber ich kann nicht scheinen, dass sie richtig funktioniert, wenn ich dies auf diese Weise lösen sollte.
Wenn Sie einen anderen Code benötigen, lassen Sie es mich wissen. Vielen Dank.
quelle
GameTime
Wird vom Framework automatisch berechnet und verwaltet. Wenn Sie also ein Null-Delta übergeben, müssen Sie ein separatesGameTime
Objekt instanziieren oder die Signatur ändern, um einen Float zu verwenden. und selbst mit einem Null-Delta würde es die Additions- und Zeitgeberprüfungen unnötig durchführen. Bei Bedarf würde ich einfach einen Teil der Methode in eine Pausenprüfung einschließen, damit die andere Hälfte weiter aktualisiert werden kann.GameTime
Objekt in einen einfachen Float konvertiere und stattdessen diesen Wert verwende. Ich hatte noch nie die Notwendigkeit, aber es erleichtert Dinge wie die Implementierung von Zeitlupe - skalieren Sie einfach den Wert der verstrichenen Zeit um eine Konstante. Was das Anhalten des Spiels angeht, ist es wohl eher eine Frage der persönlichen Präferenz - ich behandle die Pause lieber wie einen Ein / Aus-Schalter als wie ein Null-Delta, um zeitabhängige Berechnungen explizit zu überspringen, aber beide sind absolut gültige Lösungen :)