我目前正在编写一个需要计时器的游戏。我编写了一些似乎有效的代码,因为它以秒为单位向上计数,但是当我移动鼠标时,计时器重置为零并再次开始计数。显然,这不是我想要发生的事情,我尝试找出为什么会发生这种情况,而不是连续计数,但我无法解决它。
我的代码是:
passed_time = 0
timer_started = False
(^在 while 循环之外)
(/while 循环内)
for event in ev:
if event.type == pygame.QUIT:
is_alive = False
if start_clicked:
timer_started = True
if timer_started:
start_time = pygame.time.get_ticks()
if won:
timer_started = False
if timer_started:
passed_time = pygame.time.get_ticks() - start_time
text = font.render(str(passed_time / 1000), True, font_color)
screen.blit(text, (20, 450))
以及当单击相应颜色时将 [start_clicked] 或 [won] 设置为 True 的鼠标事件。
根据我对 PyGame 中计时器的基本了解,一旦 start_clicked 设置为 true,它应该会继续计数,但是每次移动鼠标时它都会重置,这完全违背了计时器的意义基于鼠标移动的回避游戏。我该如何解决这个问题并使其连续运行,直到 won 变量为 true?
如果出于某种原因我没有包含足够的内容来解决问题,the full code is here:
最佳答案
通过查看完整代码,您的事件循环是错误的,因为您的身份已关闭。
目前,您在事件循环中有 if event.type == pygame.QUIT:
,而所有其他 if event.type == another
都在事件循环之外,因为它们缩进不够。
所有检查事件的 if
都必须在事件循环内,而 if
与事件循环无关(如 if start_clicked:
) 必须位于事件循环之外,通常位于事件循环之后。
我无法修复您的所有代码,但修复事件循环肯定会有所帮助。
关于python - PyGame:每次移动鼠标时计时器都会重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59165977/