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

如何在Pygame中绘制连续线条?解决鼠标快速移动断线问题

解决Pygame中快速移动鼠标绘制连续线条的问题

嘿,我明白你遇到的问题了!你当前的代码在鼠标移动时只是在当前位置画一个单点(因为pygame.draw.line的起点和终点是同一个坐标),而Pygame的MOUSEMOTION事件不会在鼠标移动的每一个像素都触发——当鼠标快速移动时,事件触发的间隔会变大,导致留下的点之间有空隙,看起来就不连续了。

要解决这个问题,我们需要记录上一次鼠标的位置,每次鼠标移动时,从上次的位置绘制到当前位置,这样即使中间跳过了一些像素,线条也会自动连接起来,形成连续的轨迹。

修改后的完整代码

import pygame, sys
from pygame.locals import *

def main():
    pygame.init()
    WHITE = (255, 255, 255)
    BLACK = (0, 0, 0)
    # 新增变量存储上一次鼠标位置
    last_pos = (0, 0)
    mouse_position = (0, 0)
    drawing = False
    screen = pygame.display.set_mode((600, 800), 0, 32)
    screen.fill(WHITE)
    pygame.display.set_caption("ScratchBoard")

    while True:
        for event in pygame.event.get():
            if event.type == QUIT:
                pygame.quit()
                sys.exit()
            elif event.type == MOUSEMOTION:
                if drawing:
                    mouse_position = pygame.mouse.get_pos()
                    # 连接上一次位置与当前位置,绘制连续线条
                    pygame.draw.line(screen, BLACK, last_pos, mouse_position, 1)
                    # 更新上一次位置为当前位置,为下一次绘制做准备
                    last_pos = mouse_position
            elif event.type == MOUSEBUTTONUP:
                drawing = False
            elif event.type == MOUSEBUTTONDOWN:
                drawing = True
                # 按下鼠标时初始化位置,同时画一个单点(避免只点击不移动无痕迹)
                mouse_position = pygame.mouse.get_pos()
                last_pos = mouse_position
                pygame.draw.circle(screen, BLACK, mouse_position, 1)
        
        pygame.display.update()

if __name__ == "__main__":
    main()

关键修改点说明

  • 新增last_pos变量:用来追踪鼠标上一次的位置,确保每次移动都能连接前后两个点
  • MOUSEMOTION事件优化:不再绘制单点,而是用pygame.draw.line连接last_pos和当前鼠标位置,绘制完成后立即更新last_pos
  • MOUSEBUTTONDOWN补充处理:按下鼠标时不仅开启绘制状态,还初始化位置并画一个小圆点,避免只点击不移动时画布上没有痕迹

这样修改后,不管鼠标移动快还是慢,都能画出流畅的连续线条啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:02:06