所以,我有一个问题,我不完全理解需要给定时器命令的事件,它没有在网上说到我搜索了几个小时的地方。所以我只是使用了大多数人似乎使用的'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)
答案 0 :(得分:13)
让我们回顾一下pygame.time.set_timer
的作用:
pygame.time.set_timer(eventid,milliseconds):return None
将事件类型设置为每隔给定的毫秒数显示在事件队列中。第一个事件将在经过一段时间后才会出现 每种事件类型都可以附加一个单独的计时器。最好使用pygame.USEREVENT和pygame.NUMEVENTS之间的值。
pygame.USEREVENT
和pygame.NUMEVENTS
是常量(24
和32
),因此传递给eventid
的参数pygame.time.set_timer
应为任意整数在24
和32
之间。
pygame.USEREVENT+1
是25
,因此可以使用。
当您致电pygame.time.set_timer(USEREVENT+1,7000)
时,带有偶数25
的事件将每7000毫秒出现在事件队列中。您没有显示您的事件处理代码,但我猜您不会检查此事件,您应该这样做。
如您所见,pygame.time.set_timer
会返回None
,所以您的行
nyansecond = pygame.time.set_timer(USEREVENT+1,7000)
没有意义,因为nyansecond
始终为None
,因此将其与整数进行比较
if nyansecond < 200 ...
没有意义。
如果您想使用事件队列每6.5秒播放一次声音,请简单地调用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