Quick answer: Use clock.tick(60), not clock.tick_busy_loop(60). Or vsync via display flag.
Game runs at 60fps but laptop fan spins. CPU monitor shows one core pinned. tick_busy_loop is the culprit.
The Fix
clock = pygame.time.Clock()
while running:
# ... events, update, render
pygame.display.flip()
clock.tick(60) # sleeps; CPU friendly
# Alternative: vsync
screen = pygame.display.set_mode(
(1280, 720),
pygame.SCALED, vsync=1
)
tick yields CPU between frames. vsync delegates pacing to the display driver; even less CPU. tick_busy_loop only for cases where you need sub-ms timing precision.
Verifying
Task Manager / top: process CPU under 5% at 60fps. Compare with tick_busy_loop: ~95% one core.
“tick yields. busy_loop spins.”
Related Issues
For Clock vsync, see vsync. For mixer Channel, see channel.
tick yields. CPU breathes.