运行Pygame程序导致M1 MacBook发热是否正常?
问题解答
1. 发热是否正常?
运行该Pygame程序后M1 MacBook出现发热是正常现象,但你的代码存在可优化点,会导致CPU负载偏高,加重发热情况。
2. while循环是否带来负载?
是的,当前的while循环没有帧率控制,会让CPU以尽可能高的速度持续运行(跑满核心刷新率),这是导致负载过高、设备发热的核心原因。
代码优化建议
你的代码存在几处小问题,添加帧率控制后可大幅降低CPU占用:
- 修复
pygame.init()调用(漏写括号会导致初始化不完整) - 用
pygame.time.Clock()给游戏循环添加帧率限制 - 修正
player函数的参数依赖问题(函数定义了参数但未使用,直接调用全局变量)
优化后的代码:
import pygame # INITIALIZE pygame.init() # 补全括号,完成初始化 # CREATE THE SCREEN screen = pygame.display.set_mode((800, 600)) # Title and Icon pygame.display.set_caption("First Pygame") # Player playerImg = pygame.image.load("racing-car.png") playerX = 400 playerY = 300 playerX_Change = 0 playerY_Change = 0 def player(x, y): screen.blit(playerImg, (x, y)) # 使用函数参数,避免全局变量依赖 # Game Loop running = True clock = pygame.time.Clock() # 创建时钟对象控制帧率 while running: screen.fill((128, 0, 0)) for event in pygame.event.get(): if event.type == pygame.QUIT: running = False if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: playerX_Change = -5 if event.key == pygame.K_RIGHT: playerX_Change = 5 if event.key == pygame.K_DOWN: playerY_Change = 5 if event.key == pygame.K_UP: playerY_Change = -5 if event.type == pygame.KEYUP: playerX_Change = 0 playerY_Change = 0 playerY += playerY_Change playerX += playerX_Change player(playerX, playerY) pygame.display.update() clock.tick(60) # 限制帧率为60帧/秒,避免CPU空转
补充说明
- 添加
clock.tick(60)后,游戏循环每秒仅运行60次,CPU不会再无限制全速运转,发热情况会明显缓解。 - M1系列芯片能效比虽高,但无限制的循环仍会让核心持续高负载,产生热量。
内容的提问来源于stack exchange,提问作者SShield
相关产品推荐
相关产品推荐

