基本上我有一个循环(tick,set_caption,screen_fill,event.get(),send_frame_event,flip,repeat)
当我在Windows 7上拖动窗口时,循环停止循环,我最终卡在pygame.event.get()中,我试图定义某些事件仅用于获取例如得到([pygame.QUIT])无济于事。
拖动/移动窗口时,简单地调用pygame.event.clear()会产生相同的冻结效果。
有解决方法吗?
不是完整的代码,但应该足够了:
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
答案 0 :(得分:2)
尝试在mainloop(或handleEvents函数)中调用pygame.event.pump()
答案 1 :(得分:0)
不知道这是否有帮助:
我意识到问题在于移动窗口窗口,而不是重新调整窗口大小。 移动和重新调整尺寸之间可能存在一些相似之处吗?
我在重新调整大小的文档中找到了这个:
然后设置显示模式,在pygame事件队列上放置几个事件。当用户请求程序关闭时发送pygame.QUIT。当显示器获得并失去输入焦点时,窗口将接收pygame.ACTIVEEVENT事件。如果使用pygame.RESIZABLE标志设置显示,则在用户调整窗口尺寸时将发送pygame.VIDEORESIZE事件。当必须重绘窗口的某些部分时,直接绘制到屏幕的硬件显示将获得pygame.VIDEOEXPOSE事件。
和
请注意,当用户调整游戏窗口大小时, pygame不会自动更新其内部屏幕表面。每次发送VIDEORESIZE时都必须调用set_mode()。这在文档中应该更清楚。
也许在移动游戏窗口时会发生类似的事情?