如何存储方法执行结果 解决Pygame随机方块每次循环重绘问题
解决方法
你的代码问题出在随机参数的生成时机:所有随机坐标、颜色的生成逻辑都写在了dot()函数里,而这个函数会在主循环每帧刷新时被population(1000)反复调用,相当于每帧都重新生成1000组新的随机参数,自然所有方块每次都会变化。
你只需要提前一次性生成所有方块的固定参数,存在列表里,主循环里直接读取预存的参数绘制即可,不要在渲染流程里生成随机值。
修改后的完整代码如下:
import pygame import sys import random pygame.init() win = pygame.display.set_mode((800,600)) pygame.display.set_caption("Simulation") def safeZone(): # 绘制顶部绿色矩形 pygame.draw.rect(win, (50,205,50), (0, 0, 800, 100)) def dot(dot_info): width = 10 height = 10 spawnX, spawnY, r, g, b = dot_info pygame.draw.rect(win, (r, g, b), (spawnX, spawnY, width, height)) def population(dots_list): for dot_info in dots_list: dot(dot_info) # 提前预生成所有方块的参数,仅生成一次 dots_data = [] for _ in range(1000): spawnX = random.randrange(1, 801) spawnY = random.randrange(1, 601) r = random.randrange(1, 256) g = random.randrange(1, 256) b = random.randrange(1, 256) dots_data.append((spawnX, spawnY, r, g, b)) run = True while run: for event in pygame.event.get(): if event.type == pygame.QUIT: run = False win.fill((255, 255, 255)) safeZone() # 直接用预生成的参数绘制,不会再刷新随机值 population(dots_data) pygame.display.update() pygame.quit()
如果后续需要动态新增、修改方块参数,只要调整dots_data列表的内容即可,不需要改动绘制逻辑。
内容的提问来源于stack exchange,提问作者WaffleKyle
相关产品推荐
相关产品推荐

