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

如何实现Pygame中红色方块2秒后自动消失?已有尝试方案失效

解决Pygame红色方块2秒后消失的问题

你用time.sleep()的方式会阻塞游戏主循环,导致游戏冻结,这是Pygame开发里的典型错误。正确的做法是利用Pygame的时间戳跟踪方块显示时长,到时间后停止绘制,同时每次循环重绘背景网格避免留下痕迹。

修改后的完整代码

import pygame
import sys
from pygame.locals import *

pygame.init()

# 显示设置
prozor = pygame.display.set_mode((800,800))
FPS = pygame.time.Clock()

# 颜色定义
green = pygame.Color(0, 255, 0)
red = pygame.Color(255, 0, 0)
black = pygame.Color(0, 0, 0)

class Cube:
    def update(self):
        self.cx, self.cy = pygame.mouse.get_pos()
        self.square = pygame.Rect(self.cx, self.cy, 50, 50)
        # 记录方块开始显示的时间戳(毫秒)
        self.start_time = pygame.time.get_ticks()

    def draw(self):
        pygame.draw.rect(prozor, red, self.square)

cube = Cube()
drawing_cube = False

def draw_grid():
    # 每次循环重新绘制网格,避免方块消失后留下黑色痕迹
    prozor.fill(black)
    a = 0
    for j in range(16):
        for i in range(800):
            if i % 50 == 0:
                pygame.draw.rect(prozor, green, ((i, a), (50, 50)), 1)
        a += 50

# 游戏主循环
while True:
    FPS.tick(60)  # 把帧率控制放在循环内,保证稳定60帧
    current_time = pygame.time.get_ticks()

    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        if event.type == pygame.MOUSEBUTTONDOWN:
            cube.update()
            drawing_cube = True

    # 先绘制网格背景
    draw_grid()

    # 判断是否还在显示方块的时间范围内
    if drawing_cube:
        if current_time - cube.start_time < 2000:
            cube.draw()
        else:
            drawing_cube = False  # 时间到,停止绘制方块

    pygame.display.update()

关键修改说明

  • 弃用time.sleep():改用pygame.time.get_ticks()获取当前时间,对比方块开始显示的时间戳,判断是否超过2000毫秒(2秒)。这种方式不会阻塞游戏循环,保证游戏正常响应事件。
  • 新增网格重绘逻辑:每次循环先清空屏幕再绘制网格,避免方块消失后原位置留下黑色块。
  • 修正帧率控制位置:将FPS.tick(60)移至循环内部,确保帧率稳定。
  • 时间判断逻辑:当显示时长超过2秒时,切换drawing_cube状态为False,停止绘制方块。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 10:45:19