Как я могу сделать это демо-обновление игры рисования кругов быстрее с помощью Pygame? - PullRequest
2 голосов
/ 18 февраля 2020

Я пытаюсь заставить мою игру рисования нарисовать круг, куда я перетаскиваю мышь, но круги не будут обновляться достаточно часто, чтобы создать плавную линию. Как я могу это исправить?

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

Вот как выглядит моя проблема

1 Ответ

3 голосов
/ 18 февраля 2020

Я рекомендую нарисовать линию от предыдущей позиции мыши до текущей позиции мыши. Дополнительно нарисуйте точку в начале и в конце линии. Это вызывает начало и конец раунда.
Отслеживайте предыдущую позицию мыши (lastx, lasty) и рисуйте линию в главном приложении l oop, а не в событии l oop:

Например:

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...