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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 05:24:03