为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

波斯汪 2022-08-02 18:43:57
我正在尝试让我的绘图游戏在拖动鼠标的位置绘制一个圆圈,但这些圆圈的更新频率不足以创建平滑的线条。我该如何解决这个问题?import pygamefrom random import randintwidth=800height=600pygame.init() #As necessary as import, initalizes pygameglobal gameDisplay gameDisplay = 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, x, y):        self.x = x        self.y = y        pygame.draw.circle(gameDisplay, self.color, (self.x, self.y), (5))end = Falsedown = FalseLine = 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()这就是我的问题
查看完整描述

1 回答

?
撒科打诨

TA贡献1934条经验 获得超2个赞

我建议从上一个鼠标位置到当前鼠标位置绘制一条线。另外,在线的起点和终点画一个点。这会导致一个回合的开始和结束。
跟踪鼠标 (, ) 的上一个位置,并在主应用程序循环(而不是事件循环)中绘制线条:lastxlasty

例如:

https://i.stack.imgur.com/mojlK.gif

import pygame


width, height = 800, 600

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

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, 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 = False

down = False

line = 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()



查看完整回答
反对 回复 2022-08-02
  • 1 回答
  • 0 关注
  • 83 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信