Pygame绘制自然移动白色圆形出现残影无运动效果该如何修改代码
问题原因
- 未在每帧绘制前清空屏幕,上一帧绘制的圆形会一直保留在窗口中,多次绘制后就会出现大量连续的白色圆形
pygame.time.Clock.tick()的返回值单位是毫秒,原代码里直接作为三角函数的参数使用,会导致参数数值过大,圆形运动速度远超60帧的刷新率上限,视觉上就会出现不连续的跳跃感
修改后代码
import pygame from sys import exit import math BLACK = [0, 0, 0] WHITE = [255, 255, 255] class Game(): def __init__(self): pygame.init() self.window = pygame.display.set_mode((500, 500), 0, 32) pygame.display.set_caption('Jumping ball') self.clock = pygame.time.Clock() # 新增累计运行时间变量,单位为秒 self.total_time = 0 def mainloop(self): while True: for event in pygame.event.get(): if event.type == pygame.QUIT: exit() # 将每帧间隔的毫秒转为秒,累计到总运行时间中 delta_time = self.clock.tick(60) / 1000 self.total_time += delta_time # 填充背景色,清空上一帧的所有内容 self.window.fill(BLACK) x = 100 + 50 * math.sin(self.total_time) y = 100 + 50 * math.cos(self.total_time) x, y = int(x), int(y) radius = 5 pygame.draw.circle(self.window, WHITE, (x, y), radius) pygame.display.update() if __name__ == '__main__': game = Game() game.mainloop()
可选优化
如果需要保留圆形运动的拖影轨迹,可以将清空屏幕的self.window.fill(BLACK)替换为低透明度的黑色填充:self.window.fill((0, 0, 0, 10), special_flags=pygame.BLEND_RGBA_MULT)
调整第四个通道的数值可以修改拖影的残留长度。
内容的提问来源于stack exchange,提问作者Andrea
相关产品推荐
相关产品推荐

