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

如何实时更改Pygame中矩形的颜色?

实时修改Pygame矩形颜色的方法

你现在的代码只在程序启动时画了一次矩形,之后主循环仅更新显示,所以颜色变化无法体现。要实现实时改色,核心是把矩形绘制逻辑移到主循环内部,同时避开time.sleep()(会导致窗口假死),用Pygame自身的机制来控制。

核心思路

  • 将矩形绘制代码移入主循环,确保每次循环都用新颜色重绘
  • 用Pygame时钟控制帧率,避免颜色切换过快或窗口卡顿
  • 通过变量管理颜色,可实现定时切换、点击切换或渐变效果

修改后的示例代码

import pygame
pygame.init() 
surface = pygame.display.set_mode((400, 1000)) 
clock = pygame.time.Clock()  # 控制帧率,避免循环跑太快

# 把所有矩形存进列表,方便统一处理
rects = [
    pygame.Rect(100, 100, 50, 50),
    pygame.Rect(200, 200, 50, 50),
    pygame.Rect(100, 200, 50, 50),
    pygame.Rect(200, 100, 50, 50)
]

# 准备几种切换用的颜色
color_list = [(255,0,255), (255,0,0), (0,255,0), (0,0,255)]
current_color_idx = 0

running = True
while running:
    # 处理窗口关闭事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        # 可选:点击鼠标切换颜色
        if event.type == pygame.MOUSEBUTTONDOWN:
            current_color_idx = (current_color_idx + 1) % len(color_list)
    
    # 每帧更新颜色(自动切换,每30帧换一次,帧率60的话就是0.5秒一次)
    current_color_idx = (current_color_idx + 1) % len(color_list)
    current_color = color_list[current_color_idx]
    
    # 必须先填充背景,不然旧矩形会留在屏幕上
    surface.fill((0,0,0))
    
    # 绘制所有矩形
    for rect in rects:
        pygame.draw.rect(surface, current_color, rect)
    
    # 更新显示内容
    pygame.display.update()
    clock.tick(60)  # 锁定帧率为60FPS

pygame.quit()

关键细节

  • 重绘背景:每次循环开始用黑色填充整个窗口,否则之前绘制的矩形会残留,导致颜色重叠混乱。
  • 帧率控制:clock.tick(60)让循环每秒最多跑60次,既保证动画流畅,又不会让颜色切换得太快看不清。
  • 颜色渐变扩展:如果想要平滑的颜色渐变,可单独修改RGB分量,比如:
    # 初始化渐变变量
    r, g, b = 255, 0, 255
    r_step = 1  # 红色分量每次变化的步长
    
    # 在循环里更新
    r = (r + r_step) % 256
    if r == 0 or r == 255:
        r_step *= -1  # 到达边界后反向变化
    current_color = (r, g, b)
    

这样就能实现紫色到红色再回到紫色的渐变效果了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 13:06:23