我正在尝试使用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()
答案 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 + 5
,55 >= 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
阻止第二个块无限执行。有更好的方法可以做到这一点,但我希望这对你现在有所帮助。
将触发某些因素的事物与后果处理区分开来的另一个好处是,它可以让以后更容易编码。
将这两个代码块放入函数可能更好。