Setting a fixed FPS in Pygame, Python 3

38,772

The clock.tick returns the time since the last call to clock.tick. Use that value and multiply all your speeds with it when you move. Example

dt = clock.tick(60)
player.position.x += player.xSpeed * dt
player.position.y += player.ySpeed * dt

This way your player will always move at the same speed independent of what you put into the clock.tick() function.

Important is to only call clock.tick() once per frame.

Share:
38,772
Vladimir Shevyakov
Author by

Vladimir Shevyakov

Updated on July 09, 2022

Comments

  • Vladimir Shevyakov
    Vladimir Shevyakov over 1 year

    I'm currently making a game using PyGame (Python 3), and I'm looking for a way to make the game run at a fixed FPS.

    Most of the game is located inside a giant while loop, where the user input is taken, sprites are rendered, etc. every tick. My goal is to be able to set a fixed FPS that will make the game run at the same speed on a fast or slow computer.

    I can, of course, use the clock module in pygame:

    clock = pygame.time.Clock()
    

    and then call this every loop:

    clock.tick(30)
    

    but that will keep the game CAPPED at 30 FPS. So if I set it to 500 FPS it might still run as fast as it did before. My goal is that if I set it to 500 FPS it will run at the same SPEED as it would at 500 FPS...

    So is it possible to make the game run at a fixed FPS (or make an illusion of that), regardless of the speed of the computer - or at least run at the same speed through the use of some frame-skip algorithm?

    Sorry if that wording was rather confusing.