我想在鼠标点击并在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()
答案 0 :(得分:2)
通过使用相同的参数(mouse_position)调用.val
两次,你没有画一条线,你正在绘制一个像素,因为start_pos和end_pos是相同的。
要获得一条连续的线,你需要保存最后一个位置并在它和下一个位置之间画一条线,就像这样(更改是pygame.draw.line
的线条):
last_pos
答案 1 :(得分:0)
vgel是对的,您需要将之前的位置和当前位置传递给pygame.draw.line
。您还可以通过从event.rel
属性中减去事件的event.pos
属性来计算先前的位置。
使用drawing
属性也可以删除event.buttons
变量。如果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()