Как настроить код, который работает только если я перемещаю мышь - PullRequest
1 голос
/ 27 апреля 2019

Мой код должен быть правильным, однако он работает, только если я двигаю мышью, даже если я ее даже не настраивал.код должен рисовать движущиеся концентрические круги.

Я даже пытался заблокировать мышь, но она все еще не работает

import pygame
import math
import time
pygame.init()
screen = pygame.display.set_mode([800,600])
black = (0,0,0)
keep_going = True

white = (255,255,255)
freq = 10
num_circles = 0
radius = 0

while keep_going:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            keep_going = False


        radius = radius + 1
        num_circles = math.ceil(radius / freq)
        screen.fill(white)

        radiusMax = num_circles * freq

        pace = freq / radiusMax


        for y in range(num_circles, 1, -1):

            radiusY = int(((pace * (num_circles - y)) + pace) * radiusMax) + (radius % freq)

            pygame.draw.circle(screen, black,(400, 300), radiusY, 1)

        pygame.display.update()           
pygame.quit()

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

1 Ответ

1 голос
/ 27 апреля 2019

Проблема вызвана тем, что вы делаете весь код в цикле событий.Код в цикле событий выполняется только при возникновении события, такого как движение мыши (pygame.MOUSEMOTION).

Выполните рисование в основном цикле, а не в цикле событий, чтобы решить проблему:

while keep_going:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            keep_going = False

    #<--
    #<--
    #while input() != "quit":
    #for x in range(1): #importante
    raggio = raggio + 1
    num_cerchi = math.ceil(raggio / freq)
    screen.fill(white)

    raggioMax = num_cerchi * freq

    passo = freq / raggioMax
    #time.sleep(5)

    for y in range(num_cerchi, 1, -1):
    # 1, -1

        raggioY = int(((passo * (num_cerchi - y)) + passo) * raggioMax) + (raggio % freq)

        pygame.draw.circle(screen, black,(400, 300), raggioY, 1)

        #raggio = raggio+1 #importante
    clock.tick(60)
    pygame.display.update()           
pygame.quit()
...