ebiten: rename TPS functions

* SetMaxTPS() -> SetTPS()
* MaxTPS() -> TPS()
* CurrentTPS() -> ActualTPS()
* CurrentFPS() -> ActualFPS()

Closes #2071
This commit is contained in:
Hajime Hoshi 2022-07-17 11:25:45 +09:00
parent 356c625601
commit 0f52381580
34 changed files with 89 additions and 58 deletions

View File

@ -270,7 +270,7 @@ func (g *Game) Draw(screen *ebiten.Image) {
// Draw the message. // Draw the message.
tutorial := "Space: Move forward\nLeft/Right: Rotate" tutorial := "Space: Move forward\nLeft/Right: Rotate"
msg := fmt.Sprintf("TPS: %0.2f\nFPS: %0.2f\n%s", ebiten.CurrentTPS(), ebiten.CurrentFPS(), tutorial) msg := fmt.Sprintf("TPS: %0.2f\nFPS: %0.2f\n%s", ebiten.ActualTPS(), ebiten.ActualFPS(), tutorial)
ebitenutil.DebugPrint(screen, msg) ebitenutil.DebugPrint(screen, msg)
} }

View File

@ -43,7 +43,7 @@ type Game struct {
func (g *Game) Update() error { func (g *Game) Update() error {
g.count++ g.count++
g.count %= ebiten.MaxTPS() * 10 g.count %= ebiten.TPS() * 10
return nil return nil
} }

View File

@ -369,7 +369,7 @@ Press U to switch the runnable-on-unfocused state
Press A to switch Ogg and MP3 (Current: %s) Press A to switch Ogg and MP3 (Current: %s)
Current Time: %s Current Time: %s
Current Volume: %d/128 Current Volume: %d/128
Type: %s`, ebiten.CurrentTPS(), p.musicType, Type: %s`, ebiten.ActualTPS(), p.musicType,
currentTimeStr, int(p.audioPlayer.Volume()*128), p.musicType) currentTimeStr, int(p.audioPlayer.Volume()*128), p.musicType)
ebitenutil.DebugPrint(screen, msg) ebitenutil.DebugPrint(screen, msg)
} }

View File

@ -86,7 +86,7 @@ audio.NewInfiniteLoopWithIntro.
Intro: 0[s] - %[2]d[s] Intro: 0[s] - %[2]d[s]
Loop: %[2]d[s] - %[3]d[s] Loop: %[2]d[s] - %[3]d[s]
Current: %0.2[4]f[s]`, ebiten.CurrentTPS(), introLengthInSecond, introLengthInSecond+loopLengthInSecond, float64(pos)/float64(time.Second)) Current: %0.2[4]f[s]`, ebiten.ActualTPS(), introLengthInSecond, introLengthInSecond+loopLengthInSecond, float64(pos)/float64(time.Second))
ebitenutil.DebugPrint(screen, msg) ebitenutil.DebugPrint(screen, msg)
} }

View File

@ -108,7 +108,7 @@ func (g *Game) Draw(screen *ebiten.Image) {
This is an example using This is an example using
stereo audio panning. stereo audio panning.
Current: %0.2f[s] Current: %0.2f[s]
Panning: %.2f`, ebiten.CurrentTPS(), float64(pos)/float64(time.Second), g.panning) Panning: %.2f`, ebiten.ActualTPS(), float64(pos)/float64(time.Second), g.panning)
ebitenutil.DebugPrint(screen, msg) ebitenutil.DebugPrint(screen, msg)
// draw image to show where the sound is at related to the screen // draw image to show where the sound is at related to the screen

View File

@ -68,7 +68,7 @@ func (s *GamepadScene) Update(state *GameState) error {
if state.Input.gamepadConfig.Scan(b) { if state.Input.gamepadConfig.Scan(b) {
s.currentIndex++ s.currentIndex++
if s.currentIndex == len(virtualGamepadButtons) { if s.currentIndex == len(virtualGamepadButtons) {
s.countAfterSetting = ebiten.MaxTPS() s.countAfterSetting = ebiten.TPS()
} }
} }
return nil return nil

View File

@ -238,7 +238,7 @@ func (s *GameScene) Update(state *GameState) error {
return nil return nil
} }
maxLandingCount := ebiten.MaxTPS() maxLandingCount := ebiten.TPS()
if s.currentPiece == nil { if s.currentPiece == nil {
s.initCurrentPiece(s.choosePiece()) s.initCurrentPiece(s.choosePiece())
} }

View File

@ -185,7 +185,7 @@ func (g *Game) Draw(screen *ebiten.Image) {
worldX, worldY := g.camera.ScreenToWorld(ebiten.CursorPosition()) worldX, worldY := g.camera.ScreenToWorld(ebiten.CursorPosition())
ebitenutil.DebugPrint( ebitenutil.DebugPrint(
screen, screen,
fmt.Sprintf("TPS: %0.2f\nMove (WASD/Arrows)\nZoom (QE)\nRotate (R)\nReset (Space)", ebiten.CurrentTPS()), fmt.Sprintf("TPS: %0.2f\nMove (WASD/Arrows)\nZoom (QE)\nRotate (R)\nReset (Space)", ebiten.ActualTPS()),
) )
ebitenutil.DebugPrintAt( ebitenutil.DebugPrintAt(

View File

@ -91,7 +91,7 @@ func NewGame() *Game {
} }
func (g *Game) Update() error { func (g *Game) Update() error {
g.space.Step(1.0 / float64(ebiten.MaxTPS())) g.space.Step(1.0 / float64(ebiten.TPS()))
return nil return nil
} }
@ -107,7 +107,7 @@ func (g *Game) Draw(screen *ebiten.Image) {
screen.DrawImage(dot, op) screen.DrawImage(dot, op)
}) })
ebitenutil.DebugPrint(screen, fmt.Sprintf("TPS: %0.2f", ebiten.CurrentTPS())) ebitenutil.DebugPrint(screen, fmt.Sprintf("TPS: %0.2f", ebiten.ActualTPS()))
} }
func (g *Game) Layout(outsideWidth, outsideHeight int) (int, int) { func (g *Game) Layout(outsideWidth, outsideHeight int) (int, int) {

View File

@ -312,7 +312,7 @@ func (g *Game) Draw(screen *ebiten.Image) {
scoreStr := fmt.Sprintf("%04d", g.score()) scoreStr := fmt.Sprintf("%04d", g.score())
text.Draw(screen, scoreStr, arcadeFont, screenWidth-len(scoreStr)*fontSize, fontSize, color.White) text.Draw(screen, scoreStr, arcadeFont, screenWidth-len(scoreStr)*fontSize, fontSize, color.White)
ebitenutil.DebugPrint(screen, fmt.Sprintf("TPS: %0.2f", ebiten.CurrentTPS())) ebitenutil.DebugPrint(screen, fmt.Sprintf("TPS: %0.2f", ebiten.ActualTPS()))
} }
func (g *Game) pipeAt(tileX int) (tileY int, ok bool) { func (g *Game) pipeAt(tileX int) (tileY int, ok bool) {

View File

@ -129,7 +129,7 @@ type Game struct {
func (g *Game) Update() error { func (g *Game) Update() error {
// Change the text color for each second. // Change the text color for each second.
if g.counter%ebiten.MaxTPS() == 0 { if g.counter%ebiten.TPS() == 0 {
g.kanjiText = "" g.kanjiText = ""
for j := 0; j < 4; j++ { for j := 0; j < 4; j++ {
for i := 0; i < 8; i++ { for i := 0; i < 8; i++ {
@ -151,7 +151,7 @@ func (g *Game) Draw(screen *ebiten.Image) {
const x = 20 const x = 20
// Draw info // Draw info
msg := fmt.Sprintf("TPS: %0.2f", ebiten.CurrentTPS()) msg := fmt.Sprintf("TPS: %0.2f", ebiten.ActualTPS())
text.Draw(screen, msg, mplusNormalFont, x, 40, color.White) text.Draw(screen, msg, mplusNormalFont, x, 40, color.White)
// Draw the sample text // Draw the sample text

View File

@ -95,7 +95,7 @@ func (g *Game) Draw(screen *ebiten.Image) {
} }
} }
ebitenutil.DebugPrint(screen, fmt.Sprintf("TPS: %0.2f", ebiten.CurrentTPS())) ebitenutil.DebugPrint(screen, fmt.Sprintf("TPS: %0.2f", ebiten.ActualTPS()))
} }
func (g *Game) Layout(outsideWidth, outsideHeight int) (int, int) { func (g *Game) Layout(outsideWidth, outsideHeight int) (int, int) {

View File

@ -151,7 +151,7 @@ func (g *Game) Draw(screen *ebiten.Image) {
g.renderLevel(screen) g.renderLevel(screen)
// Print game info. // Print game info.
ebitenutil.DebugPrint(screen, fmt.Sprintf("KEYS WASD EC R\nFPS %0.0f\nTPS %0.0f\nSCA %0.2f\nPOS %0.0f,%0.0f", ebiten.CurrentFPS(), ebiten.CurrentTPS(), g.camScale, g.camX, g.camY)) ebitenutil.DebugPrint(screen, fmt.Sprintf("KEYS WASD EC R\nFPS %0.0f\nTPS %0.0f\nSCA %0.2f\nPOS %0.0f,%0.0f", ebiten.ActualFPS(), ebiten.ActualTPS(), g.camScale, g.camX, g.camY))
} }
// Layout is called when the Game's layout changes. // Layout is called when the Game's layout changes.

View File

@ -65,7 +65,7 @@ func (g *Game) Update() error {
func (g *Game) Draw(screen *ebiten.Image) { func (g *Game) Draw(screen *ebiten.Image) {
screen.ReplacePixels(g.noiseImage.Pix) screen.ReplacePixels(g.noiseImage.Pix)
ebitenutil.DebugPrint(screen, fmt.Sprintf("TPS: %0.2f\nFPS: %0.2f", ebiten.CurrentTPS(), ebiten.CurrentFPS())) ebitenutil.DebugPrint(screen, fmt.Sprintf("TPS: %0.2f\nFPS: %0.2f", ebiten.ActualTPS(), ebiten.ActualFPS()))
} }
func (g *Game) Layout(outsideWidth, outsideHeight int) (int, int) { func (g *Game) Layout(outsideWidth, outsideHeight int) (int, int) {

View File

@ -100,7 +100,7 @@ func (g *Game) paint(canvas *ebiten.Image, x, y int) {
op.GeoM.Translate(float64(x), float64(y)) op.GeoM.Translate(float64(x), float64(y))
// Scale the color and rotate the hue so that colors vary on each frame. // Scale the color and rotate the hue so that colors vary on each frame.
op.ColorM.Scale(1.0, 0.50, 0.125, 1.0) op.ColorM.Scale(1.0, 0.50, 0.125, 1.0)
tps := ebiten.MaxTPS() tps := ebiten.TPS()
theta := 2.0 * math.Pi * float64(g.count%tps) / float64(tps) theta := 2.0 * math.Pi * float64(g.count%tps) / float64(tps)
op.ColorM.RotateHue(theta) op.ColorM.RotateHue(theta)
canvas.DrawImage(brushImage, op) canvas.DrawImage(brushImage, op)

View File

@ -164,7 +164,7 @@ func (g *Game) Draw(screen *ebiten.Image) {
s.draw(screen) s.draw(screen)
} }
ebitenutil.DebugPrint(screen, fmt.Sprintf("TPS: %0.2f\nSprites: %d", ebiten.CurrentTPS(), g.sprites.Len())) ebitenutil.DebugPrint(screen, fmt.Sprintf("TPS: %0.2f\nSprites: %d", ebiten.ActualTPS(), g.sprites.Len()))
} }
func (g *Game) Layout(outsideWidth, outsideHeight int) (int, int) { func (g *Game) Layout(outsideWidth, outsideHeight int) (int, int) {

View File

@ -124,7 +124,7 @@ func (g *Game) playNote(scoreIndex int) rune {
} }
const vol = 1.0 / 16.0 const vol = 1.0 / 16.0
size := (ebiten.MaxTPS()/2 - 2) * sampleRate / ebiten.MaxTPS() size := (ebiten.TPS()/2 - 2) * sampleRate / ebiten.TPS()
l := make([]int16, size) l := make([]int16, size)
r := make([]int16, size) r := make([]int16, size)
square(l, vol, freq, 0.25) square(l, vol, freq, 0.25)

View File

@ -229,7 +229,7 @@ func (g *Game) Draw(screen *ebiten.Image) {
screen.Fill(color.RGBA{0x80, 0x80, 0xc0, 0xff}) screen.Fill(color.RGBA{0x80, 0x80, 0xc0, 0xff})
screen.DrawImage(pianoImage, nil) screen.DrawImage(pianoImage, nil)
ebitenutil.DebugPrint(screen, fmt.Sprintf("TPS: %0.2f", ebiten.CurrentTPS())) ebitenutil.DebugPrint(screen, fmt.Sprintf("TPS: %0.2f", ebiten.ActualTPS()))
} }
func (g *Game) Layout(outsideWidth, outsideHeight int) (int, int) { func (g *Game) Layout(outsideWidth, outsideHeight int) (int, int) {

View File

@ -153,7 +153,7 @@ func (g *Game) Draw(screen *ebiten.Image) {
g.gopher.draw(screen) g.gopher.draw(screen)
// Show the message // Show the message
msg := fmt.Sprintf("TPS: %0.2f\nPress the space key to jump.", ebiten.CurrentTPS()) msg := fmt.Sprintf("TPS: %0.2f\nPress the space key to jump.", ebiten.ActualTPS())
ebitenutil.DebugPrint(screen, msg) ebitenutil.DebugPrint(screen, msg)
} }

View File

@ -130,7 +130,7 @@ func (g *Game) Draw(screen *ebiten.Image) {
} }
screen.DrawTriangles(g.vertices, indices, emptyImage.SubImage(image.Rect(1, 1, 2, 2)).(*ebiten.Image), op) screen.DrawTriangles(g.vertices, indices, emptyImage.SubImage(image.Rect(1, 1, 2, 2)).(*ebiten.Image), op)
msg := fmt.Sprintf("TPS: %0.2f\n%d-gon\nPress <- or -> to change the number of the vertices", ebiten.CurrentTPS(), g.ngon) msg := fmt.Sprintf("TPS: %0.2f\n%d-gon\nPress <- or -> to change the number of the vertices", ebiten.ActualTPS(), g.ngon)
ebitenutil.DebugPrint(screen, msg) ebitenutil.DebugPrint(screen, msg)
} }

View File

@ -279,7 +279,7 @@ func (g *Game) Draw(screen *ebiten.Image) {
} }
ebitenutil.DebugPrintAt(screen, "WASD: move", 160, 0) ebitenutil.DebugPrintAt(screen, "WASD: move", 160, 0)
ebitenutil.DebugPrintAt(screen, fmt.Sprintf("TPS: %0.2f", ebiten.CurrentTPS()), 51, 51) ebitenutil.DebugPrintAt(screen, fmt.Sprintf("TPS: %0.2f", ebiten.ActualTPS()), 51, 51)
ebitenutil.DebugPrintAt(screen, fmt.Sprintf("Rays: 2*%d", len(rays)/2), padding, 222) ebitenutil.DebugPrintAt(screen, fmt.Sprintf("Rays: 2*%d", len(rays)/2), padding, 222)
} }

View File

@ -63,7 +63,7 @@ func (g *Game) Update() error {
func (g *Game) Draw(screen *ebiten.Image) { func (g *Game) Draw(screen *ebiten.Image) {
screen.DrawImage(g.offscreen, nil) screen.DrawImage(g.offscreen, nil)
ebitenutil.DebugPrint(screen, fmt.Sprintf("TPS: %0.2f\nFPS: %0.2f", ebiten.CurrentTPS(), ebiten.CurrentFPS())) ebitenutil.DebugPrint(screen, fmt.Sprintf("TPS: %0.2f\nFPS: %0.2f", ebiten.ActualTPS(), ebiten.ActualFPS()))
} }
func (g *Game) Layout(outsideWidth, outsideHeight int) (int, int) { func (g *Game) Layout(outsideWidth, outsideHeight int) (int, int) {

View File

@ -178,7 +178,7 @@ func (g *Game) Draw(screen *ebiten.Image) {
v, i = rect(300-float32(cf), 50, 120, 120, color.RGBA{0x00, 0x80, 0x00, 0x80}) v, i = rect(300-float32(cf), 50, 120, 120, color.RGBA{0x00, 0x80, 0x00, 0x80})
screen.DrawTriangles(v, i, src, nil) screen.DrawTriangles(v, i, src, nil)
ebitenutil.DebugPrint(screen, fmt.Sprintf("TPS: %0.2f", ebiten.CurrentTPS())) ebitenutil.DebugPrint(screen, fmt.Sprintf("TPS: %0.2f", ebiten.ActualTPS()))
} }
func (g *Game) Layout(outsideWidth, outsideHeight int) (int, int) { func (g *Game) Layout(outsideWidth, outsideHeight int) (int, int) {

View File

@ -107,7 +107,7 @@ func (g *Game) Update() error {
} }
func (g *Game) Draw(screen *ebiten.Image) { func (g *Game) Draw(screen *ebiten.Image) {
msg := fmt.Sprintf("TPS: %0.2f\nThis is an example using infinite audio stream.", ebiten.CurrentTPS()) msg := fmt.Sprintf("TPS: %0.2f\nThis is an example using infinite audio stream.", ebiten.ActualTPS())
ebitenutil.DebugPrint(screen, msg) ebitenutil.DebugPrint(screen, msg)
} }

View File

@ -181,7 +181,7 @@ func (g *Game) Draw(screen *ebiten.Image) {
if g.moveDirection == dirNone { if g.moveDirection == dirNone {
ebitenutil.DebugPrint(screen, fmt.Sprintf("Press up/down/left/right to start")) ebitenutil.DebugPrint(screen, fmt.Sprintf("Press up/down/left/right to start"))
} else { } else {
ebitenutil.DebugPrint(screen, fmt.Sprintf("FPS: %0.2f Level: %d Score: %d Best Score: %d", ebiten.CurrentFPS(), g.level, g.score, g.bestScore)) ebitenutil.DebugPrint(screen, fmt.Sprintf("FPS: %0.2f Level: %d Score: %d Best Score: %d", ebiten.ActualFPS(), g.level, g.score, g.bestScore))
} }
} }

View File

@ -206,7 +206,7 @@ func (g *Game) Draw(screen *ebiten.Image) {
msg := fmt.Sprintf(`TPS: %0.2f msg := fmt.Sprintf(`TPS: %0.2f
FPS: %0.2f FPS: %0.2f
Num of sprites: %d Num of sprites: %d
Press <- or -> to change the number of sprites`, ebiten.CurrentTPS(), ebiten.CurrentFPS(), g.sprites.num) Press <- or -> to change the number of sprites`, ebiten.ActualTPS(), ebiten.ActualFPS(), g.sprites.num)
ebitenutil.DebugPrint(screen, msg) ebitenutil.DebugPrint(screen, msg)
} }

View File

@ -191,7 +191,7 @@ func (g *Game) Draw(screen *ebiten.Image) {
FPS: %0.2f FPS: %0.2f
Num of sprites: %d Num of sprites: %d
Press <- or -> to change the number of sprites Press <- or -> to change the number of sprites
Press Q to quit`, ebiten.CurrentTPS(), ebiten.CurrentFPS(), g.sprites.num) Press Q to quit`, ebiten.ActualTPS(), ebiten.ActualFPS(), g.sprites.num)
ebitenutil.DebugPrint(screen, msg) ebitenutil.DebugPrint(screen, msg)
} }

View File

@ -326,7 +326,7 @@ func (g *Game) Draw(screen *ebiten.Image) {
screen.DrawImage(g.canvas, nil) screen.DrawImage(g.canvas, nil)
ebitenutil.DebugPrintAt( ebitenutil.DebugPrintAt(
screen, screen,
fmt.Sprintf("TPS: %0.2f, FPS: %0.2f", ebiten.CurrentTPS(), ebiten.CurrentFPS()), fmt.Sprintf("TPS: %0.2f, FPS: %0.2f", ebiten.ActualTPS(), ebiten.ActualFPS()),
1, 0, 1, 0,
) )
ebitenutil.DebugPrintAt( ebitenutil.DebugPrintAt(
@ -351,7 +351,7 @@ func (g *Game) Layout(outsideWidth, outsideHeight int) (int, int) {
} }
func main() { func main() {
ebiten.SetMaxTPS(250) ebiten.SetTPS(250)
ebiten.SetWindowSize(width*scale, height*scale) ebiten.SetWindowSize(width*scale, height*scale)
ebiten.SetWindowTitle("Squirals (Ebiten Demo)") ebiten.SetWindowTitle("Squirals (Ebiten Demo)")
if err := ebiten.RunGame(NewGame()); err != nil { if err := ebiten.RunGame(NewGame()); err != nil {

View File

@ -82,7 +82,7 @@ func (g *Game) Draw(screen *ebiten.Image) {
} }
} }
ebitenutil.DebugPrint(screen, fmt.Sprintf("TPS: %0.2f", ebiten.CurrentTPS())) ebitenutil.DebugPrint(screen, fmt.Sprintf("TPS: %0.2f", ebiten.ActualTPS()))
} }
func (g *Game) Layout(outsideWidth, outsideHeight int) (int, int) { func (g *Game) Layout(outsideWidth, outsideHeight int) (int, int) {

View File

@ -253,7 +253,7 @@ func (g *Game) Draw(screen *ebiten.Image) {
drawArc(screen, g.counter) drawArc(screen, g.counter)
drawWave(screen, g.counter) drawWave(screen, g.counter)
ebitenutil.DebugPrint(screen, fmt.Sprintf("TPS: %0.2f\nFPS: %0.2f", ebiten.CurrentTPS(), ebiten.CurrentFPS())) ebitenutil.DebugPrint(screen, fmt.Sprintf("TPS: %0.2f\nFPS: %0.2f", ebiten.ActualTPS(), ebiten.ActualFPS()))
} }
func (g *Game) Layout(outsideWidth, outsideHeight int) (int, int) { func (g *Game) Layout(outsideWidth, outsideHeight int) (int, int) {

View File

@ -126,7 +126,7 @@ func (g *game) Update() error {
runnableOnUnfocused := ebiten.IsRunnableOnUnfocused() runnableOnUnfocused := ebiten.IsRunnableOnUnfocused()
cursorMode := ebiten.CursorMode() cursorMode := ebiten.CursorMode()
fpsMode := ebiten.FPSMode() fpsMode := ebiten.FPSMode()
tps := ebiten.MaxTPS() tps := ebiten.TPS()
decorated := ebiten.IsWindowDecorated() decorated := ebiten.IsWindowDecorated()
positionX, positionY := ebiten.WindowPosition() positionX, positionY := ebiten.WindowPosition()
g.transparent = ebiten.IsScreenTransparent() g.transparent = ebiten.IsScreenTransparent()
@ -257,7 +257,7 @@ func (g *game) Update() error {
restore := false restore := false
if ebiten.IsWindowMaximized() || ebiten.IsWindowMinimized() { if ebiten.IsWindowMaximized() || ebiten.IsWindowMinimized() {
if *flagAutoRestore { if *flagAutoRestore {
restore = g.count%ebiten.MaxTPS() == 0 restore = g.count%ebiten.TPS() == 0
} else { } else {
restore = inpututil.IsKeyJustPressed(ebiten.KeyE) restore = inpututil.IsKeyJustPressed(ebiten.KeyE)
} }
@ -277,7 +277,7 @@ func (g *game) Update() error {
if fpsMode != ebiten.FPSMode() { if fpsMode != ebiten.FPSMode() {
ebiten.SetFPSMode(fpsMode) ebiten.SetFPSMode(fpsMode)
} }
ebiten.SetMaxTPS(tps) ebiten.SetTPS(tps)
ebiten.SetWindowDecorated(decorated) ebiten.SetWindowDecorated(decorated)
if toUpdateWindowPosition { if toUpdateWindowPosition {
ebiten.SetWindowPosition(positionX, positionY) ebiten.SetWindowPosition(positionX, positionY)
@ -318,7 +318,7 @@ func (g *game) Draw(screen *ebiten.Image) {
minw, minh, maxw, maxh := ebiten.WindowSizeLimits() minw, minh, maxw, maxh := ebiten.WindowSizeLimits()
cx, cy := ebiten.CursorPosition() cx, cy := ebiten.CursorPosition()
tpsStr := "Sync with FPS" tpsStr := "Sync with FPS"
if t := ebiten.MaxTPS(); t != ebiten.SyncWithFPS { if t := ebiten.TPS(); t != ebiten.SyncWithFPS {
tpsStr = fmt.Sprintf("%d", t) tpsStr = fmt.Sprintf("%d", t)
} }
@ -360,7 +360,7 @@ Window size limitation: (%d, %d) - (%d, %d)
Cursor: (%d, %d) Cursor: (%d, %d)
TPS: Current: %0.2f / Max: %s TPS: Current: %0.2f / Max: %s
FPS: %0.2f FPS: %0.2f
Device Scale Factor: %0.2f`, msgM, msgR, fg, wx, wy, ww, wh, minw, minh, maxw, maxh, cx, cy, ebiten.CurrentTPS(), tpsStr, ebiten.CurrentFPS(), ebiten.DeviceScaleFactor()) Device Scale Factor: %0.2f`, msgM, msgR, fg, wx, wy, ww, wh, minw, minh, maxw, maxh, cx, cy, ebiten.ActualTPS(), tpsStr, ebiten.ActualFPS(), ebiten.DeviceScaleFactor())
ebitenutil.DebugPrint(screen, msg) ebitenutil.DebugPrint(screen, msg)
} }

View File

@ -75,7 +75,7 @@ func (g *Game) Draw(screen *ebiten.Image) {
// The blow 3 line matters to reproduce #2154. // The blow 3 line matters to reproduce #2154.
mx, my := ebiten.CursorPosition() mx, my := ebiten.CursorPosition()
msg := fmt.Sprintf("TPS: %.01f; FPS: %.01f; cursor: (%d, %d)", ebiten.CurrentTPS(), ebiten.CurrentFPS(), mx, my) msg := fmt.Sprintf("TPS: %.01f; FPS: %.01f; cursor: (%d, %d)", ebiten.ActualTPS(), ebiten.ActualFPS(), mx, my)
ebitenutil.DebugPrint(screen, msg) ebitenutil.DebugPrint(screen, msg)
} }

View File

@ -76,7 +76,7 @@ func (g *Game) Draw(screen *ebiten.Image) {
// The blow 3 line matters to reproduce #2154. // The blow 3 line matters to reproduce #2154.
mx, my := ebiten.CursorPosition() mx, my := ebiten.CursorPosition()
msg := fmt.Sprintf("TPS: %.01f; FPS: %.01f; cursor: (%d, %d)", ebiten.CurrentTPS(), ebiten.CurrentFPS(), mx, my) msg := fmt.Sprintf("TPS: %.01f; FPS: %.01f; cursor: (%d, %d)", ebiten.ActualTPS(), ebiten.ActualFPS(), mx, my)
ebitenutil.DebugPrint(screen, msg) ebitenutil.DebugPrint(screen, msg)
} }

67
run.go
View File

@ -31,8 +31,8 @@ type Game interface {
// that the time delta between two Updates is always 1 / TPS [s] (1/60[s] by default). As Ebitengine already // that the time delta between two Updates is always 1 / TPS [s] (1/60[s] by default). As Ebitengine already
// adjusts the number of Update calls, you don't have to measure time deltas in Update by e.g. OS timers. // adjusts the number of Update calls, you don't have to measure time deltas in Update by e.g. OS timers.
// //
// An actual TPS is available by CurrentTPS(), and the result might slightly differ from your expected TPS, // An actual TPS is available by ActualTPS(), and the result might slightly differ from your expected TPS,
// but still, your game logic should stick to the fixed time delta and should not rely on CurrentTPS() value. // but still, your game logic should stick to the fixed time delta and should not rely on ActualTPS() value.
// This API is for just measurement and/or debugging. In the long run, the number of Update calls should be // This API is for just measurement and/or debugging. In the long run, the number of Update calls should be
// adjusted based on the set TPS on average. // adjusted based on the set TPS on average.
// //
@ -78,19 +78,27 @@ type Game interface {
// DefaultTPS represents a default ticks per second, that represents how many times game updating happens in a second. // DefaultTPS represents a default ticks per second, that represents how many times game updating happens in a second.
const DefaultTPS = clock.DefaultTPS const DefaultTPS = clock.DefaultTPS
// CurrentFPS returns the current number of FPS (frames per second), that represents // ActualFPS returns the current number of FPS (frames per second), that represents
// how many swapping buffer happens per second. // how many swapping buffer happens per second.
// //
// On some environments, CurrentFPS doesn't return a reliable value since vsync doesn't work well there. // On some environments, ActualFPS doesn't return a reliable value since vsync doesn't work well there.
// If you want to measure the application's speed, Use CurrentTPS. // If you want to measure the application's speed, Use ActualTPS.
// //
// This value is for measurement and/or debug, and your game logic should not rely on this value. // This value is for measurement and/or debug, and your game logic should not rely on this value.
// //
// CurrentFPS is concurrent-safe. // ActualFPS is concurrent-safe.
func CurrentFPS() float64 { func ActualFPS() float64 {
return clock.ActualFPS() return clock.ActualFPS()
} }
// CurrentFPS returns the current number of FPS (frames per second), that represents
// how many swapping buffer happens per second.
//
// Deprecated: as of v2.4. Use ActualFPS instead.
func CurrentFPS() float64 {
return ActualFPS()
}
var ( var (
isRunGameEnded_ = int32(0) isRunGameEnded_ = int32(0)
) )
@ -387,7 +395,7 @@ const (
// //
// In FPSModeVsyncOffMinimum, the game's Update and Draw are called only when // In FPSModeVsyncOffMinimum, the game's Update and Draw are called only when
// 1) new inputting except for gamepads is detected, or 2) ScheduleFrame is called. // 1) new inputting except for gamepads is detected, or 2) ScheduleFrame is called.
// In FPSModeVsyncOffMinimum, TPS is SyncWithFPS no matter what TPS is specified at SetMaxTPS. // In FPSModeVsyncOffMinimum, TPS is SyncWithFPS no matter what TPS is specified at SetTPS.
FPSModeVsyncOffMinimum FPSModeType = ui.FPSModeVsyncOffMinimum FPSModeVsyncOffMinimum FPSModeType = ui.FPSModeVsyncOffMinimum
) )
@ -413,21 +421,36 @@ func ScheduleFrame() {
ui.Get().ScheduleFrame() ui.Get().ScheduleFrame()
} }
// TPS returns the current maximum TPS.
//
// TPS is concurrent-safe.
func TPS() int {
return clock.TPS()
}
// MaxTPS returns the current maximum TPS. // MaxTPS returns the current maximum TPS.
// //
// MaxTPS is concurrent-safe. // Deprecated: as of v2.4. Use TPS instead.
func MaxTPS() int { func MaxTPS() int {
return clock.TPS() return TPS()
}
// ActualTPS returns the current TPS (ticks per second),
// that represents how many Update function is called in a second.
//
// This value is for measurement and/or debug, and your game logic should not rely on this value.
//
// ActualTPS is concurrent-safe.
func ActualTPS() float64 {
return clock.ActualTPS()
} }
// CurrentTPS returns the current TPS (ticks per second), // CurrentTPS returns the current TPS (ticks per second),
// that represents how many Update function is called in a second. // that represents how many Update function is called in a second.
// //
// This value is for measurement and/or debug, and your game logic should not rely on this value. // Deprecated: as of v2.4. Use ActualTPS instead.
//
// CurrentTPS is concurrent-safe.
func CurrentTPS() float64 { func CurrentTPS() float64 {
return clock.ActualTPS() return ActualTPS()
} }
// SyncWithFPS is a special TPS value that means TPS syncs with FPS. // SyncWithFPS is a special TPS value that means TPS syncs with FPS.
@ -438,18 +461,26 @@ const SyncWithFPS = clock.SyncWithFPS
// Deprecated: as of v2.2. Use SyncWithFPS instead. // Deprecated: as of v2.2. Use SyncWithFPS instead.
const UncappedTPS = SyncWithFPS const UncappedTPS = SyncWithFPS
// SetMaxTPS sets the maximum TPS (ticks per second), // SetTPS sets the maximum TPS (ticks per second),
// that represents how many updating function is called per second. // that represents how many updating function is called per second.
// The initial value is 60. // The initial value is 60.
// //
// If tps is SyncWithFPS, TPS is uncapped and the game is updated per frame. // If tps is SyncWithFPS, TPS is uncapped and the game is updated per frame.
// If tps is negative but not SyncWithFPS, SetMaxTPS panics. // If tps is negative but not SyncWithFPS, SetTPS panics.
// //
// SetMaxTPS is concurrent-safe. // SetTPS is concurrent-safe.
func SetMaxTPS(tps int) { func SetTPS(tps int) {
clock.SetTPS(tps) clock.SetTPS(tps)
} }
// SetMaxTPS sets the maximum TPS (ticks per second),
// that represents how many updating function is called per second.
//
// Deprecated: as of v2.4. Use SetTPS instead.
func SetMaxTPS(tps int) {
SetTPS(tps)
}
// IsScreenTransparent reports whether the window is transparent. // IsScreenTransparent reports whether the window is transparent.
// //
// IsScreenTransparent is concurrent-safe. // IsScreenTransparent is concurrent-safe.