mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2024-12-26 11:48:55 +01:00
clock: Bug fix: Syncing with the system clock happens more often than expected
When the specified TPS is too big (e.g., 300), the time threshold to determine whether the clock should be synchronized with the system clock can be too small, and the decision can be wrong too often. To fix this, prepare another time assuming the TPS was 60 and use the bigger one. Fixes #1443
This commit is contained in:
parent
ce24640da8
commit
4215678f4c
@ -57,6 +57,13 @@ func CurrentTPS() float64 {
|
|||||||
return v
|
return v
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func max(a, b int64) int64 {
|
||||||
|
if a < b {
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
return a
|
||||||
|
}
|
||||||
|
|
||||||
func calcCountFromTPS(tps int64, now int64) int {
|
func calcCountFromTPS(tps int64, now int64) int {
|
||||||
if tps == 0 {
|
if tps == 0 {
|
||||||
return 0
|
return 0
|
||||||
@ -73,7 +80,10 @@ func calcCountFromTPS(tps int64, now int64) int {
|
|||||||
count := 0
|
count := 0
|
||||||
syncWithSystemClock := false
|
syncWithSystemClock := false
|
||||||
|
|
||||||
if diff > int64(time.Second)*5/int64(tps) {
|
// When TPS is big (e.g. 300), the time gap can be small and diff might always exceeds the gap.
|
||||||
|
// To avoid this, prepare another gap assuming TPS was 60 and use the bigger one (#1443).
|
||||||
|
tooBigGap := max(int64(time.Second)*5/int64(tps), int64(time.Second)*5/60)
|
||||||
|
if diff > tooBigGap {
|
||||||
// The previous time is too old.
|
// The previous time is too old.
|
||||||
// Let's force to sync the game time with the system clock.
|
// Let's force to sync the game time with the system clock.
|
||||||
syncWithSystemClock = true
|
syncWithSystemClock = true
|
||||||
|
Loading…
Reference in New Issue
Block a user