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

Python使用Pygame绘制动态延伸线条时出现绘制速度异常问题

错误原因
  • 固定步长逻辑错误:当前代码x、y轴每次固定+5,完全没有适配鼠标位置和起点之间的实际方向,仅做了end大于等于鼠标坐标时直接赋值为鼠标坐标的判断,没有处理end小于鼠标坐标之外的情况:
    1. 当鼠标在起点左侧时,初始end的x坐标为500,大于左侧鼠标的x值,会直接被赋值为鼠标x坐标,所以线条瞬间绘制完成
    2. 当鼠标在起点右侧时,x需要从500每次+5逐步涨到鼠标x值,所以看起来有延迟
    3. 仅当鼠标y坐标和起点y一致时,y方向没有差值,表现才符合预期
  • 没有做向量归一化:不同角度的线条增长速度会不一致,斜向线条的视觉增长速度会比水平/垂直更快
修复后代码
import pygame, sys
from math import sqrt

pygame.init()

screen = pygame.display.set_mode((1280, 720))
pygame.display.set_caption("loading")
clock = pygame.time.Clock()

start = [500, 500]
move_speed = 5  # 统一的线条增长速度
end = start.copy()

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    mouse_pos = list(pygame.mouse.get_pos())
    screen.fill("#0d0e2e")

    if pygame.mouse.get_pressed()[0]:
        # 计算当前终点到鼠标目标点的向量
        dx = mouse_pos[0] - end[0]
        dy = mouse_pos[1] - end[1]
        distance = sqrt(dx**2 + dy**2)
        
        if distance > move_speed:
            # 归一化方向向量后乘以速度,得到本次移动的步长
            end[0] += move_speed * dx / distance
            end[1] += move_speed * dy / distance
        else:
            # 距离小于步长时直接到目标点,避免抖动
            end = mouse_pos.copy()
    else:
        # 松开鼠标时重置终点到起点
        end = start.copy()

    pygame.draw.line(screen, (255, 169, 255), start, list(map(int, end)), 12)
    pygame.display.update()
    clock.tick(60)
修复说明
  • 新增方向向量计算逻辑,不管鼠标在哪个方向,线条都会沿着起点到鼠标的方向匀速增长
  • 增加向量归一化处理,所有方向的线条增长视觉速度完全一致
  • 适配鼠标拖动时实时更新目标点的场景,拖动鼠标时线条会跟随调整方向

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:45:06