Как выполнить событие повторно в Python? - PullRequest
0 голосов
/ 27 марта 2020

Я новичок в программировании Pygame. Мне нужно, чтобы эта операция увеличивала скорость персонажа (который представлен в виде движущихся изображений на экране) каждые 10 секунд, используя «self.vel + = 1». Вероятно, pygame.time.set_timer) сделает это, но я не знаю, как его использовать. Поскольку я использую окно с движущимися изображениями, time.sleep не будет хорошей идеей, потому что тогда окно зависнет. Какой должен быть лучший вариант и как его использовать?

Ответы [ 2 ]

0 голосов
/ 27 марта 2020

Вот простой пример использования таймера. Экран заполнен цветом, который меняется каждые 0,4 секунды.

import pygame
import itertools

CUSTOM_TIMER_EVENT = pygame.USEREVENT + 1
my_colors = ["red", "orange", "yellow", "green", "blue", "purple"]
# create an iterator that will repeat these colours forever
color_cycler = itertools.cycle([pygame.color.Color(c) for c in my_colors])

pygame.init()
pygame.font.init()
clock = pygame.time.Clock()
screen = pygame.display.set_mode([320,240])
pygame.display.set_caption("Timer for Dino Gržinić")
done = False
background_color = next(color_cycler)
pygame.time.set_timer(CUSTOM_TIMER_EVENT, 400)  
while not done:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done = True
        elif event.type == CUSTOM_TIMER_EVENT:
            background_color = next(color_cycler)
    #Graphics
    screen.fill(background_color)
    #Frame Change
    pygame.display.update()
    clock.tick(30)
pygame.quit()

Код для создания таймера: pygame.time.set_timer(CUSTOM_TIMER_EVENT, 400). Это приводит к тому, что событие генерируется каждые 400 миллисекунд. Так что для вашей цели вы захотите изменить это на 10000. Заметьте, что вы можете включить подчеркивания в константы нумерации c, чтобы сделать его более очевидным, чтобы вы могли использовать 10_000.

После того, как событие сгенерировано, его нужно обработать, так что это в elif event.type == CUSTOM_TIMER_EVENT: заявление. Вот где вы захотите увеличить скорость вашего спрайта.

Наконец, если вы хотите отменить таймер, например, при окончании игры, вы указываете ноль в качестве длительности таймера: pygame.time.set_timer(CUSTOM_TIMER_EVENT, 0).

Дайте мне знать, если вам нужны какие-либо разъяснения.

Running Example

0 голосов
/ 27 марта 2020

Используя модуль Python time , вы можете рассчитывать десять секунд, пока ваш код работает, и увеличивать скорость по истечении десяти секунд.

...