pygame.time.set_timer() - 4 2楼层点击

时间:2014-10-25 13:41:47

标签: python pygame

为什么每444毫秒没有播放我的click.wav?它似乎只是随机播放。

import pygame

pygame.init()
size = (700, 500)
screen = pygame.display.set_mode(size)

pygame.display.set_caption("444ms click")
done = False
clock = pygame.time.Clock()
noise = pygame.mixer.Sound("click.wav")
pygame.time.set_timer(1, 444)

while not done:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done = True
        if event.type == 1:
            noise.play()

    clock.tick(60)

pygame.quit()

如果有人知道我怎么能更容易地做到这一点会很好。

谢谢!

@JFSebeastian:这是the code的输出:

447
436
443
430
449
431
448
432
910
7
407
447
442
432
446
431
448
432
450
432
446
472

1 个答案:

答案 0 :(得分:0)

使用event.type == pygame.USEREVENT + 1,否则可能由于其他原因(无论1事件类型在pygame中对应)生成事件,这就是它显示为随机的原因。


the code的输出显示时间间隔大多为440±10毫秒,但9107对除外。

{p> ±10毫秒的定时器对于fps=60来说是正常的。要获得更紧密的时间安排,您可以使用clock.tick()代替clock.tick(60)

9107对建议set_timer() / tick()可能在某处使用time.sleep()模拟。 time.sleep()可能睡眠超过指定的时间,这就是计时器可能跳过节拍的原因。尝试不应该睡觉的clock.tick_busy_loop(),看看是否可以重现跳过。