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

如何修复Pygame中菱形组成的立方体闪烁问题

问题解决:立方体闪烁+重启程序切换配色

问题根源

你的代码现在每一帧都会重新生成立方体的随机配色,导致画面每一帧都在变化,视觉上就出现了闪烁。而你需要的是「重启程序时配色不同」,不是运行过程中实时变更配色,所以随机颜色的生成时机完全错误。

修复方案

把配色方案的生成移到主循环外面,程序启动时只生成一次,之后每一帧都用这套固定的颜色绘制——既解决闪烁问题,又能保证每次重启程序自动切换新的配色。

修改后的代码

import pygame as pg
import random

pg.init()
screen = pg.display.set_mode((500, 800))
clock = pg.time.Clock()
BG_COLOR = pg.Color('black')
WHITE = pg.Color('white')
ORANGE = pg.Color('orange')
BLUE = pg.Color('blue')
RED = pg.Color('red')
PURPLE = pg.Color('purple')
m = 8

def rhumbus(screen, color, plus):
    point1 = (170, 500 - plus)
    point2 = (350, 500 - plus)
    point3 = (300, 550 - plus)
    point4 = (120, 550 - plus)
    points = [point1, point2, point3, point4]
    return pg.draw.polygon(screen, color, points)

# 程序启动时生成一次配色方案,重启就会重新生成新组合
def generate_cube_colors():
    colors = []
    old_col = None
    for _ in range(10):
        rando = random.choice([RED, ORANGE, RED, BLUE, WHITE])
        if rando != old_col:
            colors.append(rando)
            old_col = rando
        else:
            colors.append(PURPLE)
            old_col = rando
    return colors

# 接收预先生成的颜色列表绘制立方体
def cube(color_list):
    plus = -72
    for color in color_list:
        rhumbus(screen, color, plus)
        plus += 8

# 初始化时生成固定配色
cube_colors = generate_cube_colors()

done = False
while not done:
    for event in pg.event.get():
        if event.type == pg.QUIT:
            done = True
    
    screen.fill(BG_COLOR)
    cube(cube_colors)  # 用固定配色绘制,不再实时随机
    pg.display.flip()
    clock.tick(60)  # 调高帧率让画面更流畅

关键改动点

  • 新增generate_cube_colors()函数,在程序启动时一次性生成整套立方体颜色,满足「重启换配色」的需求
  • 修改cube()函数,改用预先生成的颜色列表绘制,彻底解决帧间配色变化导致的闪烁
  • 将帧率从10调高到60,优化画面流畅度(可选但体验提升明显)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 00:50:36