Workshop › Flappy-style Bird › Step 28 of 30

The same speed on every screen

What we are doing

requestAnimationFrame runs once per screen refresh: 60 times a second on most screens, 120 or 144 on many phones. Since update runs once per frame, the bird falls twice as fast there. We keep the physics at exactly 60 steps per second of real time instead.

```js
const STEP = 1000 / 60 // one physics step, in milliseconds
let last = 0
let lag = 0

function loop(time) {
  // Run the physics at a fixed 60 steps per second, whatever the screen's refresh rate.
  lag += time - last
  last = time
  while (lag >= STEP) {
    update()
    lag -= STEP
  }
  draw()
```

What it means

Your turn

  1. Above function loop, write STEP, last and lag, then an empty line.
  2. Change loop as shown: time in the parentheses, and update() inside the while.

Skills: The game loop, Velocity and gravity

All steps

  1. Get the canvas and the pen
  2. Paint the sky
  3. Draw the bird
  4. A function that draws
  5. A function that moves
  6. The game loop
  7. Gravity
  8. A flap
  9. Space, Up arrow or a tap
  10. Wait for the first flap
  11. The ground and the sky
  12. Tell the player
  13. A pipe as data
  14. Draw the pipes
  15. The world moves, not the bird
  16. A new pipe at a random height
  17. A pipe every 90 frames
  18. Remove the pipes you passed
  19. Is the bird level with a pipe?
  20. Through the opening
  21. Score each pipe once
  22. Show the score
  23. A function for a fresh start
  24. Try again
  25. One place where the game ends
  26. Remember the best score
  27. Show the best score
  28. The same speed on every screen
  29. No catching up after a pause
  30. Build it yourself: a medal