Python PyGame задержка - PullRequest
1 голос
/ 01 июня 2019

У меня есть такая функция:

  def valami() :
        pygame.draw.rect(screen, (0, 255, 0), (0, 0, 20, 20)) 
        pygame.draw.rect(screen, (0, 255, 0), (100, 100, 120, 120)) 
        pygame.draw.rect(screen, (0, 255, 0), (200, 200, 220, 220)) 

И это мой основной цикл while:

  while True:
        valami() 

Я хочу рисовать эти 3 прямоугольника один за другим каждые 5 секунд.

1 Ответ

1 голос
/ 01 июня 2019

Определите массив прямоугольников и счетчик:

rects = [(0, 0, 20, 20), (100, 100, 120, 120), (200, 200, 220, 220)]
counter = 0

Нарисуйте прямоугольник в зависимости от counter в valami:

def valami() :
    pygame.draw.rect(screen, (0, 255, 0), rects[counter % len(rects)]) 

Определите пользовательское событие, см. (pygame.event) и запустите таймер с интервалом в 5000 миллисекунд (5 секунд) перед основным циклом, см. pygame.time.set_timer():

mytimerevent = pygame.USEREVENT + 1
pygame.time.set_timer(mytimerevent, 5000) # 5000 milliseconds  

Увеличение counter когда истечет таймер.Таймер можно остановить, вызвав pygame.time.set_timer() с интервалом 0:

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

        if event.type == mytimerevent: # timer event
            counter += 1
            if counter == 2:
                pygame.time.set_timer(mytimerevent, 0) # stop timer

    screen.fill(0)
    valami()
    pygame.display.flip()

Обратите внимание, что оператор модуля (%) вычисляет остаток (остаток) от интеграладеление.
Из-за rects[counter % len(rects)] прямоугольники будут нарисованы одним в цикле, если вы не остановите таймер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...