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

