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

Pygame中pygame.display.update引发画面闪烁或内容不显示问题求助

问题根源

你的代码执行顺序逻辑错误,导致绘制的矩形被后续操作覆盖:

  • 主游戏循环的执行顺序是 事件处理→逻辑更新(update)→画面绘制(draw)
  • 你把矩形绘制逻辑写在了update阶段,绘制完成后进入draw方法的第一步就是self.screen.fill(black),会将整个屏幕填充为黑色,直接覆盖你刚画好的矩形,所以不加额外的update调用完全看不到矩形。
  • 你加的额外pygame.display.update(rect)会在屏幕被涂黑前先刷新一次矩形区域,紧接着屏幕被涂黑后又会执行全局的pygame.display.update(),同一帧内矩形区域先显示画好的红色、再被覆盖为黑色,就会出现闪烁问题。
解决方法

遵循Pygame开发的标准规范:逻辑更新与画面绘制完全分离,所有绘制操作统一放在draw阶段执行,全局仅保留一次pygame.display.update()调用即可。

步骤1:修改精灵的update方法

移除update方法里所有绘制相关的代码,只保留逻辑状态更新(碰撞检测、showPopup状态赋值等):

def update(self):
    self.hitbox.center = numpy.add(self.rect.center,(8,22))
    self.interactionhitbox.center = numpy.add(self.rect.center, (8,16))
    # 原有碰撞检测、设置self.showPopup为True/False的逻辑保留在这里即可

步骤2:修改Game类的draw方法

在填充屏幕、绘制完全部精灵后,再根据showPopup状态绘制矩形:

def draw(self):
    self.screen.fill(black)
    self.all_sprites.draw(self.screen)
    # 新增弹出矩形绘制逻辑,self.player替换为你实际的玩家精灵实例变量名
    if self.player.showPopup:
        color = (255,0,0)
        rect = pygame.Rect((0,0,60,60))
        pygame.draw.rect(self.screen, color, rect)
    self.clock.tick(FPS)
    pygame.display.update()

修改完成后删除原来多余的pygame.display.update(rect)调用即可,既可以正常显示矩形,也不会出现闪烁问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 13:54:03