我正在用pygame写一个游戏。如果我在玩游戏的时候用鼠标拖动窗口,游戏看起来会暂停,但是当我们松开鼠标点击的时候,敌人已经越过了所有的墙,正在愉快地走向远方。
我推测这是因为循环继续更新精灵的位置,但由于某种原因没有检测到墙和敌人之间的碰撞。
无论如何,我决定让pygame告诉我窗口是否被拖动了。然后我想去暂停比赛吧。
有没有可以做到这一点的函数?否则我该怎么做呢?
如果这个问题没有解决,我显然可以让全屏一直使用,但我更喜欢解决这个问题。
发布于 2014-06-18 06:01:58
这是一个有点晚的答案,但我希望它仍然对任何人有用。如果你在pygame中打印你的程序的FPS,你会注意到当你拖动一个窗口时,它们会下降很多,或者这样说:你的增量时间将会非常高。
我的主循环现在每次都会返回,当增量时间大于某个特定值时。
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使用毫秒!)。如果它提出了太高的resp。FPS降得太低(高于0.05s = 20FPS),我不再执行主代码。
您可以根据需要调整这些值。我计算出,对于游戏来说,0.05的限制是最好的,因为程序应该仍然可以在不能达到帧率的旧机器上执行(例如,在25FPS时,DT已经是0.04s!)。
如果这对您有任何用处,请告诉我:)
https://stackoverflow.com/questions/21110149
复制相似问题