Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Pygame中画一条连续线?_Python_Pygame - Fatal编程技术网

Python 如何在Pygame中画一条连续线?

Python 如何在Pygame中画一条连续线?,python,pygame,Python,Pygame,我想在Pygame框架中单击鼠标并移动时画一条线,如果我非常缓慢地移动鼠标,这将是一条线。然而,如果我快速移动鼠标,它只是不连续的点。问题是鼠标移动时如何画一条连续线?提前谢谢 import pygame, sys from pygame.locals import * def main(): pygame.init() WHITE = (255, 255, 255) BLACK = (0, 0, 0) mouse_position = (0, 0)

我想在Pygame框架中单击鼠标并移动时画一条线,如果我非常缓慢地移动鼠标,这将是一条线。然而,如果我快速移动鼠标,它只是不连续的点。问题是鼠标移动时如何画一条连续线?提前谢谢

import pygame, sys
from pygame.locals import *

def main():
    pygame.init()

    WHITE = (255, 255, 255)
    BLACK = (0, 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, mouse_position, mouse_position, 1)
            elif event.type == MOUSEBUTTONUP:
                mouse_position = (0, 0)
                drawing = False
            elif event.type == MOUSEBUTTONDOWN:
                drawing = True

        pygame.display.update()

if __name__ == "__main__":
    main()

通过使用相同的参数(鼠标位置)调用两次
pygame.draw.line
,您不是在画一条线,而是在画一个像素,因为开始位置和结束位置是相同的

要获得一条连续的线,您需要保存最后一个位置并在它和下一个位置之间画一条线,如下所示(更改是带有
last\u pos
的线):


vgel是正确的,您需要将上一个位置和当前位置传递到
pygame.draw.line
。您还可以通过从
event.pos
属性中减去事件的
event.rel
属性来计算上一个位置

通过使用
event.buttons
属性,还可以去掉
绘图
变量。如果
事件按钮[0]
True
,则按下鼠标左键

import pygame


def main():
    pygame.init()

    WHITE = (255, 255, 255)
    BLACK = (0, 0, 0)
    screen = pygame.display.set_mode((600, 800), 0, 32)
    screen.fill(WHITE)
    clock = pygame.time.Clock()

    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                return
            elif event.type == pygame.MOUSEMOTION:
                if event.buttons[0]:  # Left mouse button down.
                    last = (event.pos[0]-event.rel[0], event.pos[1]-event.rel[1])
                    pygame.draw.line(screen, BLACK, last, event.pos, 1)

        pygame.display.update()
        clock.tick(30)  # Limit the frame rate to 30 FPS.

if __name__ == "__main__":
    main()

在我更正结束位置后,它仍然是不连续的:elif event.type==MOUSEMOTION:if(绘图):start_position=event.pos end_position=(event.pos[0]+event.rel[0],event.pos[1]+event.rel[1])如果您想要生成一条连续的线,这段代码工作得很好。如果您想在释放鼠标时断线并保持断线,只需在
elif event.type==MOUSEBUTTONUP:
语句下添加
last\u pos=None
import pygame


def main():
    pygame.init()

    WHITE = (255, 255, 255)
    BLACK = (0, 0, 0)
    screen = pygame.display.set_mode((600, 800), 0, 32)
    screen.fill(WHITE)
    clock = pygame.time.Clock()

    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                return
            elif event.type == pygame.MOUSEMOTION:
                if event.buttons[0]:  # Left mouse button down.
                    last = (event.pos[0]-event.rel[0], event.pos[1]-event.rel[1])
                    pygame.draw.line(screen, BLACK, last, event.pos, 1)

        pygame.display.update()
        clock.tick(30)  # Limit the frame rate to 30 FPS.

if __name__ == "__main__":
    main()