【问题标题】:How to tell if the window is being dragged in pygame如何判断窗口是否在pygame中被拖动
【发布时间】:2014-01-14 09:39:42
【问题描述】:

我正在使用 pygame 编写游戏。如果我在玩游戏时用鼠标拖动窗口,那么游戏似乎会暂停,但是当我们松开鼠标点击时,敌人已经越过了所有的墙壁,并且正在愉快地向远处移动。

我推测这是因为循环继续更新精灵的位置,但由于某种原因没有检测到墙壁和敌人之间的碰撞。

无论如何,我决定让 pygame 告诉我窗口是否被拖动。然后我想暂停游戏。

有没有可以做到这一点的功能?不然怎么办?

如果这个问题没有得到解决,我显然可以一直使用全屏,但我更愿意解决这个问题。

【问题讨论】:

  • 这在我看来不像答案是检测何时有人拖动窗口。看起来您应该弄清楚当有人拖动窗口并使其停止发生时发生了什么。您的游戏甚至不应该注意到窗口何时被拖动。
  • 我知道这个回复有点晚了;但是关于评论,我注意到了同样的效果,我怀疑这不是因为代码继续运行,而是因为通过使用 DeltaTime = clock.tick(30) 来调整慢速计算机,那么这个导致循环被延迟 - 但不是时钟,因此这个值增加到更大的比例。我相信这一点,因为我注意到通过停止循环使游戏暂停时产生相同的效果 - 发生了同样的事情 - 但是当我通过将变量声明为 clock.tick(30) 1 额外时间来“浪费”一个值时,这停止了

标签: python time drag-and-drop window pygame


【解决方案1】:

这是一个迟到的答案,但我希望它对任何人仍然有用。如果您在 pygame 中打印程序的 FPS,您会注意到当您拖动窗口时它们会下降很多,或者这样说:您的 delta-time 会非常高。

我的主循环现在每次都返回,当增量时间高于某个值时。

class MainProgram(object):
    def __init__(self, many_variables):
        # Much code here

        self.clock = pygame.time.Clock()
        self.dt = self.clock.tick(60) / 1000

    def mainloop(self):
        while self.running == True:
            self.dt = self.clock.tick(60) / 1000
            if self.dt >= 0.05
                return
            # Rest of the program is only executed, if delta-time is below 0.05 sec

我的 FPS 限制为 60。同时我以秒为单位计算 DT(pygame 使用毫秒!)。如果它提高了太高的响应。 FPS 降得太低(0.05s 以上 = 20FPS),我不再执行主代码。

您可以根据需要调整这些值。我发现对于游戏来说,0.05 的限制大约是最好的,因为该程序应该仍然可以在无法达到帧速率的旧机器上执行(例如,在 25FPS 时,DT 已经是 0.04 秒!)。

如果这对你有用,请告诉我:)

【讨论】:

  • 很公平。当我们继续执行时,设置一个值来限制。我最终只是使用全屏来完全避免这个问题。
猜你喜欢
  • 1970-01-01
  • 2010-10-05
  • 1970-01-01
  • 2012-06-16
  • 2010-09-27
  • 1970-01-01
  • 2013-04-06
  • 1970-01-01
  • 2011-03-07
相关资源
最近更新 更多