我正在使用pygame编写游戏。如果我在玩游戏时用鼠标拖动窗口,那么游戏似乎暂停,但是当我们释放鼠标时,敌人已经越过了所有的墙壁并且正在快速地进入远处。
我认为这是因为循环继续更新精灵的位置,但由于某种原因没有检测到墙壁和敌人之间的碰撞。
无论如何,我决定让pygame告诉我窗口是否被拖动。然后我想停下来玩游戏。
有没有可以做到这一点的功能?否则我该怎么做?
如果这个问题没有得到解决,我显然可以在整个时间内全屏使用,但我更愿意解决此问题。
答案 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秒!)。
请告诉我这是否对你有用:)