如何修复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
相关产品推荐
相关产品推荐

