Pygame矩形无法显示,除非切换窗口后重新切回
Pygame绘制的矩形仅切换窗口后才显示,如何解决?
问题描述
我写了一段Pygame代码,调用pygame.draw.rect绘制矩形,但程序运行后矩形不显示,只有切换窗口再切回来才会出现。代码如下:
import pygame, sys from pygame.locals import * pygame.init() WHITE = (255,255,255) class setup(): def set_resolution(x, y): global surf global screen surf = pygame.Surface((x,y)) screen = pygame.display.set_mode((x,y)) pygame.display.set_caption("Lewis' Game") pygame.draw.rect(screen, WHITE,(200,150,150,50)) def menu(): pass setup.set_resolution(1024,768) setup.menu() while True: for event in pygame.event.get(): if event.type == QUIT: sys.exit()
解决方法
这是Pygame入门时非常典型的问题——你没有主动刷新屏幕缓冲区。
Pygame的所有绘制操作(比如draw.rect)都是在后台的离屏缓冲区完成的,这些内容不会自动同步到显示窗口上。只有当你调用刷新函数时,缓冲区的内容才会被推送到屏幕。而你切换窗口再切回时,系统会强制触发窗口重绘,这才让矩形显示出来。
你需要做两个核心调整:
- 在绘制流程中添加屏幕刷新的调用
- 把绘制逻辑放到主循环里(这是游戏开发的标准做法,方便后续添加动画、交互等需要持续刷新的内容)
修改后的代码示例:
import pygame, sys from pygame.locals import * pygame.init() WHITE = (255,255,255) class setup(): def set_resolution(x, y): global screen screen = pygame.display.set_mode((x,y)) pygame.display.set_caption("Lewis' Game") def menu(): pass setup.set_resolution(1024,768) setup.menu() while True: # 事件处理 for event in pygame.event.get(): if event.type == QUIT: sys.exit() # 绘制逻辑(放到主循环里,每次刷新都重绘) screen.fill((0,0,0)) # 先填充背景,避免残留之前的绘制内容 pygame.draw.rect(screen, WHITE,(200,150,150,50)) # 刷新屏幕 pygame.display.update() # 或者用pygame.display.flip(),单显示器场景下效果一致
关键细节说明
pygame.display.update():可指定刷新区域,默认刷新整个屏幕,效率更高pygame.display.flip():强制刷新整个屏幕,更适合多显示器场景- 每次循环先填充背景是为了避免旧绘制内容残留,比如后续移动矩形时,旧位置的矩形不会留在屏幕上
内容的提问来源于stack exchange,提问作者Lewis
相关产品推荐
相关产品推荐

