From b7b863cdf008348806d6bcdc5724c6c55b3575fb Mon Sep 17 00:00:00 2001 From: Rose Hogenson Date: Thu, 5 Sep 2024 22:10:35 -0700 Subject: Enable vsync. --- pongo.go | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) (limited to 'pongo.go') diff --git a/pongo.go b/pongo.go index 122044d..1c612c8 100644 --- a/pongo.go +++ b/pongo.go @@ -15,8 +15,9 @@ const ( screenWidth = 1920 screenHeight = 1080 - ballSpeed = 5 - paddleSpeed = 5 + ticksPerSecond = 300 + ballSpeed = 10 * 60 / ticksPerSecond + paddleSpeed = 10 * 60 / ticksPerSecond ) // Imagine a digital clock. Do they still make those? @@ -180,11 +181,15 @@ func pong() error { } defer ping.Free() - window, renderer, err := sdl.CreateWindowAndRenderer(screenWidth, screenHeight, sdl.WINDOW_BORDERLESS) + window, err := sdl.CreateWindow("pong", sdl.WINDOWPOS_CENTERED, sdl.WINDOWPOS_CENTERED, screenWidth, screenHeight, sdl.WINDOW_BORDERLESS) if err != nil { return err } defer window.Destroy() + renderer, err := sdl.CreateRenderer(window, -1, sdl.RENDERER_PRESENTVSYNC) + if err != nil { + return err + } defer renderer.Destroy() playerScore := 0 @@ -204,9 +209,7 @@ func pong() error { lastFrameTime := time.Now() accumulator := time.Duration(0) - renderRate := time.NewTicker(time.Second / 60) - defer renderRate.Stop() - for frameStart := range renderRate.C { + for { for event := sdl.PollEvent(); event != nil; event = sdl.PollEvent() { switch t := event.(type) { case *sdl.QuitEvent: @@ -224,11 +227,12 @@ func pong() error { } } - frameTime := frameStart.Sub(lastFrameTime) - lastFrameTime = frameStart + now := time.Now() + frameTime := now.Sub(lastFrameTime) + lastFrameTime = now accumulator += frameTime - const simulationSpeed = time.Second / 120 + const simulationSpeed = time.Second / ticksPerSecond for ; accumulator >= simulationSpeed; accumulator -= simulationSpeed { switch { case (keyPressed(sdl.K_UP) || keyPressed(sdl.K_w)) && paddle1.bounds().Y >= 0: @@ -339,7 +343,6 @@ func pong() error { renderer.Present() } - panic("unreachable") } func main() { -- cgit v1.3.1