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
相关产品推荐
相关产品推荐

