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

Pygame仅在窗口为正方形时绘制矩形的问题求助

Pygame网格矩形绘制异常修复方案

问题本质

你碰到的核心问题是渲染逻辑没跟窗口实时尺寸绑定——就算Rect坐标算对了,要么绘制时没覆盖新窗口区域,要么窗口变尺寸后没触发重绘和布局更新,导致新生成的矩形没显示。

具体修复步骤

1. 用实时窗口尺寸替代固定值

别死磕初始定义的DISPLAY_SIZE,每次绘制前拿当前窗口的实际尺寸:

# 替换固定尺寸,取当前窗口的宽高
current_w, current_h = pygame.display.get_surface().get_size()

所有网格计算(行列数、矩形位置)都基于这个实时值,别用初始固定尺寸。

2. 监听窗口 resize 事件,触发布局重算

窗口拉宽拉窄时,Pygame会发VIDEORESIZE事件,必须监听这个事件,重新计算网格:

for event in pygame.event.get():
    if event.type == pygame.QUIT:
        running = False
    # 处理窗口 resize
    elif event.type == pygame.VIDEORESIZE:
        # 更新窗口表面(保持适配)
        screen = pygame.display.set_mode((event.w, event.h), pygame.RESIZABLE)
        # 调用你的网格计算函数,重新生成所有Rect
        recalculate_grid()

3. 确保网格计算覆盖整个窗口

检查你的列数/行数计算逻辑,比如列数应该用current_w // grid_spacing + 1(grid_spacing是网格间距),而不是基于初始宽度的固定值,这样窗口变宽时才会生成更多列的矩形。

4. 每一帧全量重绘

别尝试只画新增的矩形,直接每一帧清空窗口,重新画所有矩形:

while running:
    # 用背景色清空整个窗口
    screen.fill((255, 255, 255))
    # 重新计算+绘制所有矩形
    draw_all_rectangles()
    # 更新显示
    pygame.display.flip()

5. 过滤掉窗口外的无效矩形

有时候Rect坐标正确但超出了窗口可视范围,加个判断只画窗口内的:

window_rect = pygame.Rect(0, 0, current_w, current_h)
for rect in rect_list:
    if rect.colliderect(window_rect):
        pygame.draw.rect(screen, (0, 0, 0), rect)

内容的提问来源于stack exchange,提问作者vagnerPG

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 10:20:11