diff options
| -rw-r--r-- | pongo.go | 23 |
1 files changed, 13 insertions, 10 deletions
@@ -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() { |
