Python 如何在Pygame中画一条连续线?
我想在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)
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()