Dies ist eher eine dumme Kleinigkeit, aber wenn Sie sich nicht für perfekte Präzision interessieren (wen interessiert es, wenn Sie eine Sekunde geben oder nehmen, wenn Sie über Jahrhunderte sprechen?), Dann TotalTime
ist das auch ein Doppelgänger maximalen Wert , den es speichern ist 1.7976931348623157E+308
.
Ich bin mir nicht sicher, wie Überläufe in C # funktionieren, aber wenn Sie das Spiel länger laufen lassen, würde es wahrscheinlich entweder auf so etwas zurückgehen -1.798*10^308
oder sich einfach nicht ändern. Es hängt auch davon ab, wie es intern implementiert wird.
Trotzdem ist diese Anzahl von Millisekunden ziemlich groß. Wenn man es mit dem hypothetischen Zeitalter des Universums vergleicht, ist es ... Äh ... Nun, es ist immer noch so ziemlich groß .
Natürlich, wie Sam sagte, wird die Zeit tatsächlich in Zecken gespeichert (Zehntel einer Nanosekunde?), So dass Sie nach einer " viel kürzeren " an die "Grenze" stoßen würden " Zeitspanne an . Es ist immer noch so etwas wie ein Würfel eines Googols, mal das Zeitalter des Universums.
Ich bin mir nicht sicher, wie GameTime
genau die Zeit gespeichert wird. Dies bedeutet auch, dass die TotalMilliseconds
Ausgabe möglicherweise nie "nahe" an ihren Maximalwert kommt. Wenn die Verpackungszeit in Tage und Jahre ist, wenn der Tick-Wert hoch genug wird, und nicht nur, wenn Sie den Getter anrufen, erhöht sich der Timer bis zum Maximalwert von double
in Jahren , der sogar noch höher ist .
Wenn Ihr Spiel aus irgendeinem Grund so reichlich Inhalt haben sollte, dass Zeiträume erforderlich sind, in denen sehr viele Universen geboren werden und zugrunde gehen, um sie vollständig zu erforschen, gibt es spezielle Datentypen zum Speichern beliebig großer Zahlen. Java hat eine, BigDecimal
deren Größe im Wesentlichen durch Ihren RAM (und durch den virtuellen Speicher, sogar Festplattenspeicher) begrenzt ist. Anscheinend hat C # nicht BigDecimal
, aber es hat BigInteger
.
Wenn Sie solch ein episch skaliertes Spiel machen, das zweifellos von den Göttern selbst gespielt werden soll, würden Sie wahrscheinlich zuerst die BigDecimal
Klasse duplizieren und dann die GameTime
Klasse neu implementieren (oder sogar nur regelmäßig GameTime
den Wert Ihrer Klasse hinzufügen BigDecimal
), um sie zu verwenden.