Pygame窗口交互后无响应,随机生成圆形功能异常求助
Pygame窗口交互无响应问题修复
问题根源
- Pygame的图形渲染、事件处理都不是线程安全的,跨线程操作会直接导致窗口卡死。你用
FoodGen线程直接调用绘图函数,还和主线程共用clock对象,这是引发无响应的核心原因。 - 代码里还有个小错误:生成y坐标时误用了
WIDTH,应该是HEIGHT,会导致部分圆形超出窗口范围。
修复后的代码
不需要用多线程,用Pygame的时间戳控制每秒生成圆形,所有逻辑统一放在主线程:
import pygame as pg import random pg.init() WIDTH = 600 HEIGHT = 600 sc = pg.display.set_mode((WIDTH, HEIGHT)) pg.display.set_caption("Bacteria") BLACK = (0, 0, 0) WHITE = (255, 255, 255) sc.fill(BLACK) pg.display.flip() clock = pg.time.Clock() FPS = 24 last_spawn_time = 0 # 记录上次生成圆形的时间 spawn_interval = 1000 # 间隔1000毫秒(1秒) running = True while running: clock.tick(FPS) current_time = pg.time.get_ticks() # 每隔1秒生成一个圆形 if current_time - last_spawn_time >= spawn_interval: x = random.randint(10, WIDTH - 10) y = random.randint(10, HEIGHT - 10) pg.draw.circle(sc, WHITE, (x, y), 10) last_spawn_time = current_time # 事件处理 for event in pg.event.get(): if event.type == pg.QUIT: running = False pg.display.flip() pg.quit()
说明
- 用
pg.time.get_ticks()获取当前运行的毫秒数,通过判断时间差控制生成频率,完全避免多线程冲突。 - 所有绘图、事件处理、渲染操作都放在主线程,符合Pygame的运行机制,不会再出现窗口无响应问题。
内容的提问来源于stack exchange,提问作者Розовый Гусь
相关产品推荐
相关产品推荐

