在一段时间后不能让动画停止

时间:2018-02-05 01:28:19

标签: python pygame

我正在尝试使用pygame和pyganim运行一些动画,我希望它们在按下某个键一段时间然后停止时运行。这是我到目前为止所得到的,但是我无法触及底部的if块来触发,这应该会停止动画。我假设time_now变量不断更新,所以它永远不会超过time_end。我的代码出了什么问题?

while True:
for event in pygame.event.get():
    if event.type == QUIT:
        pygame.quit()
        sys.exit()
    if event.type == KEYDOWN:
        if event.key == K_r:
            time_now = time.time()
            time_end = time.time() + 5
            runRight.stop()
            runLeft.stop()
            rollRight.stop()
            rollLeft.stop()
            standStill.stop()
            unsheathSword.play()
            if time_now >= time_end:
                print('stop')
                unsheathSword.stop()
                standStill.play()

1 个答案:

答案 0 :(得分:1)

首先,你的缩进是错误的。行while True:不应与第二行位于同一缩进级别。

由于

,您的示例无效
            time_now = time.time()
            time_end = time.time() + 5

从来没有time_now >= time_end;如果您插入值,则为time.time() >= time.time() + 5,显然始终 False。这就像说55 >= 55 + 555 >= 60总是 False

您还可以使用time.time()和您使用它们的同一位置定义两个时间,这将永远不会让其中一个与另一个相比分别进化。我建议从事件中分割事件触发器:

unsheathingSword = False

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        if event.type == KEYDOWN:
            if event.key == K_r:
                time_unsheath_end = time.time() + 5
                unsheathingSword = True
                runRight.stop()
                runLeft.stop()
                rollRight.stop()
                rollLeft.stop()
                standStill.stop()
                unsheathSword.play()

    if unsheathingSword and time.time() >= time_unsheath_end:
        print('stop')
        unsheathSword.stop()
        standStill.play()
        unsheathingSword = False

这里unsheathingSword = False阻止第二个块无限执行。有更好的方法可以做到这一点,但我希望这对你现在有所帮助。

将触发某些因素的事物与后果处理区分开来的另一个好处是,它可以让以后更容易编码。

将这两个代码块放入函数可能更好。

相关问题