Python 为什么移动/拖动窗口时pygame会冻结在pygame.event.get()处?
基本上我有一个循环(勾选、设置标题、屏幕填充、event.get()、发送帧事件、翻转、重复) 当我在windows 7上拖动窗口时,循环停止循环,我最终被困在pygame.event.get()中,我尝试仅为get定义某些事件,例如get([pygame.QUIT]),但没有成功 简单地调用pygame.event.clear()在拖动/移动窗口时具有相同的冻结效果 有解决办法吗 不是完整的代码,但应该足够:Python 为什么移动/拖动窗口时pygame会冻结在pygame.event.get()处?,python,pygame,Python,Pygame,基本上我有一个循环(勾选、设置标题、屏幕填充、event.get()、发送帧事件、翻转、重复) 当我在windows 7上拖动窗口时,循环停止循环,我最终被困在pygame.event.get()中,我尝试仅为get定义某些事件,例如get([pygame.QUIT]),但没有成功 简单地调用pygame.event.clear()在拖动/移动窗口时具有相同的冻结效果 有解决办法吗 不是完整的代码,但应该足够: def start(self): self.running = True
def start(self):
self.running = True
Clock = pygame.time.Clock()
while self.running:
self.p += 25
tickFPS = Clock.tick(self.fps)
pygame.display.set_caption("Press Esc to quit. FPS: %.2f" % (Clock.get_fps()))
self.screen.fill([self.p&0xFF,(255-self.p)&0xFF,255])
self.handleEvents()
self.raiseEvent("updateFrame")
pygame.display.flip()
def handleEvents(self):
for event in pygame.event.get():
if event.type == pygame.QUIT:
self.running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
self.running = False
完整代码位于:不知道这是否有用: 我意识到问题在于移动窗口,而不是重新调整窗口大小。 也许移动和重新调整大小之间有一些相似之处 我在关于重新调整大小的文档中发现了这一点: 然后设置显示模式,在pygame事件队列上放置几个事件。当用户请求关闭程序时,会发送pygame.QUIT。当显示器获得或失去输入焦点时,窗口将接收pygame.ACTIVEEVENT事件。如果显示设置为pygame.Resizeable标志,则当用户调整窗口尺寸时,将发送pygame.VIDEORESIZE事件。当窗口部分必须重新绘制时,直接绘制到屏幕的硬件显示将获得pygame.VIDEOEXPOSE事件 以及: 请注意,当用户调整游戏窗口的大小时,pygame不会自动更新其内部屏幕表面。每次发送VIDEORESIZE时,必须调用set_mode()。这在文档中应该更加清楚
也许在移动游戏窗口时,会发生类似的情况?尝试在主循环(或handleEvents函数)中调用
pygame.event.pump()
。将pygame.event
放在主体中的while True循环中是一种很好的做法。它们实际上是。这样做没有什么区别。除非你的意思是在另一个线程中?我在while循环的函数中调用python.event.get()时遇到了这个问题。如果我移动BASH shell,事件将不再打印到shell。“如果您的程序通过其他pygame.event函数一致地处理队列上的事件,则不需要此函数。”但为了完整性起见,我回家后会尝试此函数。这就是我编写“尝试”的原因-在不调用event.pump时,我似乎有一些不稳定的行为以及不同系统之间的差异-因此我习惯于总是调用它。这并没有解决我的问题。即使在将其放入算法后,如果我移动外壳,然后再次开始单击按钮,事件将不再被拾取/问题是pygame.event.get()实际上是阻塞。