которым 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