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.
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.