如何判断窗口是否在pygame中被拖动

时间:2014-01-14 09:39:43

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

我正在使用pygame编写游戏。如果我在玩游戏时用鼠标拖动窗口,那么游戏似乎暂停,但是当我们释放鼠标时,敌人已经越过了所有的墙壁并且正在快速地进入远处。

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

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

有没有可以做到这一点的功能?否则我该怎么做?

如果这个问题没有得到解决,我显然可以在整个时间内全屏使用,但我更愿意解决此问题。

1 个答案:

答案 0 :(得分:0)

这是一个迟到的答案,但我希望它对任何人都有用。如果你在pygame中打印你的程序的FPS,你会注意到当你拖动一个窗口或者把它放在这里时它们会掉落很多:你的delta时间会非常高。

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

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秒!)。

请告诉我这是否对你有用:)