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

为什么Pygame中按下f键生成的方块仅存在一帧?

问题原因

Pygame的渲染逻辑是每帧刷新整个画布,你当前把pygame.draw.rect写在按键事件回调里,只会在按键触发的那帧执行一次绘制,下一帧画布会被你填充的背景色完全覆盖,方块自然就消失了。

修复方案

你需要额外维护一个存储方块信息的外层变量,按下按键时只往里面添加新方块的参数,每帧渲染阶段统一遍历绘制所有方块即可,完整实现逻辑如下:

  1. 初始化阶段新增方块存储列表
import pygame
pygame.init()
screen = pygame.display.set_mode((800, 600))
# 存储所有需要持久显示的方块,格式为(横坐标, 纵坐标, 宽度, 高度, 颜色)
blocks = []
  1. 事件处理阶段只加方块不直接绘制
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)))
    # 其余事件处理逻辑保留
  1. 每帧渲染阶段统一绘制所有方块
# 第一步先填充背景覆盖上一帧内容
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:54:03