为什么Pygame中按下f键生成的方块仅存在一帧?
问题原因
Pygame的渲染逻辑是每帧刷新整个画布,你当前把pygame.draw.rect写在按键事件回调里,只会在按键触发的那帧执行一次绘制,下一帧画布会被你填充的背景色完全覆盖,方块自然就消失了。
修复方案
你需要额外维护一个存储方块信息的外层变量,按下按键时只往里面添加新方块的参数,每帧渲染阶段统一遍历绘制所有方块即可,完整实现逻辑如下:
- 初始化阶段新增方块存储列表
import pygame pygame.init() screen = pygame.display.set_mode((800, 600)) # 存储所有需要持久显示的方块,格式为(横坐标, 纵坐标, 宽度, 高度, 颜色) blocks = []
- 事件处理阶段只加方块不直接绘制
for event in pygame.event.get(): if event.type == pygame.KEYDOWN: if event.key == pygame.K_f: # 按需调整方块参数,这里先用你原代码的固定参数 blocks.append((200, 200, 15, 15, (255,255,0))) # 其余事件处理逻辑保留
- 每帧渲染阶段统一绘制所有方块
# 第一步先填充背景覆盖上一帧内容 screen.fill((0,0,0)) # 遍历绘制所有存储的方块 for x, y, w, h, color in blocks: pygame.draw.rect(screen, color, (x, y, w, h)) # 最后刷新屏幕显示 pygame.display.flip()
如果需要每次按F在不同位置生成方块,修改append的坐标参数即可,比如生成在当前鼠标位置:
mx, my = pygame.mouse.get_pos() blocks.append((mx, my, 15, 15, (255,255,0)))
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

