You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,提问作者Розовый Гусь

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 03:03:31