如何使用Pygame使这个演示绘图游戏更新绘制圆圈?

我正在尝试让我的绘图游戏在拖动鼠标的位置绘制一个圆圈,但这些圆圈的更新频率不足以创建平滑的线条。我该如何解决这个问题?


import pygame

from random import randint

width=800

height=600

pygame.init() #As necessary as import, initalizes pygame

global gameDisplay 

gameDisplay = pygame.display.set_mode((width,height))#Makes window

pygame.display.set_caption('Demo')#Titles window

clock = pygame.time.Clock()#Keeps time for pygame



gameDisplay.fill((0,0,255))


class Draw:

    def __init__(self):

        self.color = (255, 0, 0)


    def update(self, x, y):

        self.x = x

        self.y = y

        pygame.draw.circle(gameDisplay, self.color, (self.x, self.y), (5))



end = False

down = False

Line = Draw()

while not end:

    x, y = pygame.mouse.get_pos()

    #drawShape()

    #pygame.draw.rect(gameDisplay, (0,255,0), (10, 10, 4, 4))

    for event in pygame.event.get():

        if event.type == pygame.MOUSEBUTTONDOWN:

            down = True


        if event.type == pygame.MOUSEBUTTONUP:

            down = False


        if down:

            Line.update(x, y)


        if event.type == pygame.QUIT:

            end = True

    lastx, lasty = pygame.mouse.get_pos()

    pygame.display.update()


    clock.tick(60)


pygame.quit()

这就是我的问题

http://img.mukewang.com/62e8ffff0001464b06220458.jpg

波斯汪
浏览 84回答 1
1回答

撒科打诨

我建议从上一个鼠标位置到当前鼠标位置绘制一条线。另外,在线的起点和终点画一个点。这会导致一个回合的开始和结束。跟踪鼠标 (, ) 的上一个位置,并在主应用程序循环(而不是事件循环)中绘制线条:lastxlasty例如:https://i.stack.imgur.com/mojlK.gifimport pygamewidth, height = 800, 600pygame.init() #As necessary as import, initalizes pygamegameDisplay = pygame.display.set_mode((width,height)) #Makes windowpygame.display.set_caption('Demo') #Titles windowclock = pygame.time.Clock() #Keeps time for pygamegameDisplay.fill((0,0,255))class Draw:    def __init__(self):        self.color = (255, 0, 0)    def update(self, from_x, from_y, to_x, to_y):        pygame.draw.circle(gameDisplay, self.color, (from_x, from_y), 5)        pygame.draw.line(gameDisplay, self.color, (from_x, from_y), (to_x, to_y), 10)        pygame.draw.circle(gameDisplay, self.color, (to_x, to_y), 5)end = Falsedown = Falseline = Draw()while not end:    for event in pygame.event.get():        if event.type == pygame.MOUSEBUTTONDOWN:            lastx, lasty = event.pos            down = True        if event.type == pygame.MOUSEBUTTONUP:            down = False        if event.type == pygame.QUIT:            end = True    x, y = pygame.mouse.get_pos()     if down:        line.update(lastx, lasty, x, y)    lastx, lasty = x, y    pygame.display.update()    clock.tick(60)pygame.quit()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python