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

PyGame中鼠标移动时矩形颜色不更新,如何修复?

PyGame矩形鼠标悬停颜色不更新的修复方案

你的代码存在两个核心问题:修改Surface颜色后没有重新绘制到屏幕,以及显示更新的时机逻辑错误。以下是修复后的完整代码:

import pygame
from pygame.locals import *

pygame.init()
screen = pygame.display.set_mode((800, 600))
# 设置背景色,避免残留画面
bg_color = (255, 255, 255)

surf1 = pygame.Surface((200, 200))
rect1 = surf1.get_rect()
rect1.topleft = (200, 200)

done = False
while not done:
    # 填充背景,清除上一帧内容
    screen.fill(bg_color)
    
    # 实时获取鼠标位置,判断是否在矩形内
    mouse_pos = pygame.mouse.get_pos()
    if rect1.collidepoint(mouse_pos):
        surf1.fill((0, 250, 0))
    else:
        surf1.fill((250, 0, 0))
    
    # 将Surface重新绘制到屏幕
    screen.blit(surf1, rect1)
    
    # 处理事件
    for ev in pygame.event.get():
        if ev.type == QUIT:
            done = True
    
    # 刷新整个屏幕
    pygame.display.flip()

pygame.quit()

关键修改说明:

  • 添加背景填充:每次循环用screen.fill(bg_color)清除上一帧的画面,避免颜色切换时出现残留。
  • 实时检测鼠标位置:用pygame.mouse.get_pos()在主循环中实时获取鼠标位置,替代仅依赖MOUSEMOTION事件的方式,确保鼠标静止在矩形内时颜色也能保持正确。
  • 重新绘制Surface:无论颜色是否变化,每次循环都调用screen.blit(surf1, rect1)将更新后的Surface同步到屏幕,这是你之前缺失的核心步骤——只修改Surface但不重新绘制,屏幕不会显示变化。
  • 统一更新显示:将pygame.display.flip()放在主循环末尾,确保每一帧的所有绘制操作完成后再刷新屏幕,避免局部更新的逻辑混乱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:09:16