【问题标题】:PyGame: Timer resets every time the mouse is movedPyGame:每次移动鼠标时计时器都会重置
【发布时间】:2020-03-28 15:54:51
【问题描述】:

我目前正在编写一个需要计时器的游戏。我编写了一些似乎可以工作的代码,因为它以秒为单位向上计数,但是当我移动鼠标时,计时器重置为零并再次开始计数。显然,这不是我想要发生的事情,我试图弄清楚为什么会发生这种情况,而不是连续计数,但我无法解决它。

我的代码是:

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 变量为真?

如果出于某种原因我没有提供足够的信息来解决问题,the full code is here:

【问题讨论】:

  • start_clicked在什么情况下成真?每当设置此计时器时,计时器就会重新启动,这是它应该如何工作的?
  • @Kingsley start_clicked 在单击特定颜色 (0,0,255) 或蓝色时为真,一旦单击它就保持真,直到单击获胜颜色,但我不知道为什么会认为每次鼠标移动时都会设置变量,因为似乎没有其他方法可以这样做

标签: python timer pygame reset mousemove


【解决方案1】:

通过查看您的完整代码,您的事件循环是错误的,因为您的身份已关闭。

目前您在事件循环中有if event.type == pygame.QUIT:,而在它之外还有所有其他if event.type == whatever,因为它们的缩进不够。

所有检查事件的ifs 必须在事件循环内,而与事件循环无关的ifs(如if start_clicked:)必须在事件循环之外,通常在事件循环之后。

我无法修复你的所有代码,但修复事件循环肯定会有所帮助。

【讨论】:

  • 好的,我现在稍微修复了我的计时器,每次鼠标移动它都会停止重置。我不确定我到底做了什么,但基本上,我从网站复制并粘贴了计时器的代码,但我必须在某些时候切换了一些东西,这使它不起作用,但我现在修复了它。现在有没有办法将 [pygame.time.get_ticks()] 重置为零?一旦我进入下一个阶段并再次启动计时器,它会继续计算程序运行的总时间,而不是从零开始重新启动计时器
  • 没有。 pygame.time.get_ticks() 完全按照您所说的进行。它返回自调用 pygame.init() 以来的毫秒数。您可以存储以前的值并自己计算。但要跟踪时间,我建议使用Clock。你仍然需要做一些数学运算,但可能会更容易。
  • This question 可能有助于了解如何使用Clock。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-29
  • 1970-01-01
  • 2016-09-14
  • 2013-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多