которым Pygame.время.набор путаницы таймер?

Итак, у меня проблема, я не полностью понимаю событие, которое необходимо дать команде таймера в любом случае, он не говорит нигде в интернете, где я искал в течение нескольких часов. Поэтому я просто использовал то, что большинство людей, казалось, использовали "USEREVENT + 1". Я не уверен, что это правильно, но мой таймер не работает. Правильно ли я его использую? Вот мой код:

nyansecond=462346
nyanint=0
spin=0
aftin=452345

def nyanmusic(nyansecond,nyanint,spin):
    if nyanint == 0:
        nyansound.play()
        nyanint= 1
    elif nyanint == 1:
        nyansecond = pygame.time.set_timer(USEREVENT+1,7000)
    if nyansecond < 200 and spin == 1:
        spin = 0
        nyansecond = pygame.time.set_timer(USEREVENT+1,7000)
    elif nyansecond > 6500 and nyansecond < 100000 and spin == 0:
        spin = 1
        nyansoundm.play()

    return nyansecond,nyanint,spin

затем я определяю его в свой код на второй странице, которую я реализовал (что отлично работает). Он управляет nyansound, но не делает запустите nyansoundm через 6,5 секунды (6500 миллисекунд). Я делаю эту программу, чтобы помочь мне изучить основы python и pygame, прежде чем перейти к более сложным вещам. Я также могу использовать его, когда хочу слушать Nyan cat или другие циклические песни без необходимости выходить на youtube и тратить драгоценную полосу пропускания. Но об этом не беспокойся.

О, И вот код, который я поместил в свой цикл, хотя я не думаю, что это имеет слишком большое значение:

#music
        nyansecond,nyanint,spin = nyanmusic(nyansecond,nyanint,spin)

1 ответов


давайте вспомним, что pygame.time.set_timer тут:

, С которым Pygame.время.set_timer (eventid, миллисекунды): return None

задайте тип события, который будет отображаться в очереди событий каждое заданное число миллисекунд. Первое событие не появится, пока не пройдет определенное время.
К каждому типу событий может быть прикреплен отдельный таймер. Лучше всего использовать значение между pygame.USEREVENT и которым Pygame.NUMEVENTS.

pygame.USEREVENT и pygame.NUMEVENTS константы (24 и 32) аргумент eventid передать в pygame.time.set_timer должно быть любое целое число между 24 и 32.

pygame.USEREVENT+1 is 25, так что это нормально использовать.

когда вы называете pygame.time.set_timer(USEREVENT+1,7000), событие с eventid 25 будет отображаться в очереди событий каждые 7000ms. Вы не показали свой код обработки событий, но я думаю, что вы не проверяете это событие, которое вы должны делать.

Как видите, pygame.time.set_timer возвращает None, так что ваши строки

nyansecond = pygame.time.set_timer(USEREVENT+1,7000)

не имеет смысла, поскольку nyansecond всегда будет None, и, следовательно, сравнивая его с целым

if nyansecond < 200 ...

бессмысленно.


если вы хотите воспроизводить звук каждые 6,5 секунды с помощью очереди событий, simpy call pygame.time.set_timer когда-то(!):

PLAYSOUNDEVENT = USEREVENT + 1
...
pygame.time.set_timer(PLAYSOUNDEVENT, 6500)

и проверьте очередь событий для этого события в главном цикле:

while whatever: # main loop
    ...
    # event handling
    if pygame.event.get(PLAYSOUNDEVENT): # check event queue contains PLAYSOUNDEVENT 
        nyansoundm.play() # play the sound