因此,我有一个问题,无论如何我都不完全了解需要给计时器命令提供的事件,它没有说在线的任何地方,也没有搜索我几个小时的地方。因此,我只是使用了大多数人似乎在使用的“ 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,但在6.5秒(6500毫秒)后不运行nyansoundm。在编写更复杂的内容之前,我正在制作此程序来帮助我学习python和pygame的基础知识。当我想收听nyan cat或其他循环播放的歌曲而不必在youtube上浪费宝贵的带宽时,也可以使用它。不过不要担心。
哦,这是我放入循环中的代码,尽管我认为这不太重要:
#music nyansecond,nyanint,spin = nyanmusic(nyansecond,nyanint,spin)
让我们回顾一下pygame.time.set_timer:
pygame.time.set_timer
pygame.time.set_timer(eventid,ms):返回无 设置事件类型,使其每隔给定的毫秒数出现在事件队列中。在经过一定时间之前,不会出现第一个事件。 每个事件类型都可以附加一个单独的计时器。最好使用pygame.USEREVENT和pygame.NUMEVENTS之间的值。
pygame.time.set_timer(eventid,ms):返回无
设置事件类型,使其每隔给定的毫秒数出现在事件队列中。在经过一定时间之前,不会出现第一个事件。 每个事件类型都可以附加一个单独的计时器。最好使用pygame.USEREVENT和pygame.NUMEVENTS之间的值。
pygame.USEREVENT和pygame.NUMEVENTS是常数(24和32),因此eventid您传递给的参数pygame.time.set_timer应该是24和之间的任何整数32。
pygame.USEREVENT
pygame.NUMEVENTS
24
32
eventid
pygame.USEREVENT+1是25,因此可以使用。
pygame.USEREVENT+1
25
当您呼叫时pygame.time.set_timer(USEREVENT+1,7000),25每隔7000毫秒就会将事件编号为eventid的事件显示在事件queue列中。您没有显示事件处理代码,但是我想您不检查此事件,而应该这样做。
pygame.time.set_timer(USEREVENT+1,7000)
如您所见,pygame.time.set_timerreturn None,所以您的行
None
nyansecond = pygame.time.set_timer(USEREVENT+1,7000)
没有意义,因为nyansecond它将始终为None,因此将其与整数进行比较
nyansecond
if nyansecond < 200 ...
是没有意义的。
如果要使用事件队列每6.5秒播放一次声音,请pygame.time.set_timer一次调用simpy (!):
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