在显示之外单击时,pygame 显示变得无响应

问题描述 投票:0回答:1

我对使用 pygame 库和一般图形非常陌生。

我有一个递归函数,它通过回溯来解决数独难题。我正在尝试使用 pygame 来可视化这个过程。

每次递归函数尝试新的有效数字时,都会进行以下调用:

self.engine.draw_font(str(num), self.engine.get_position(i, j))

它调用的函数将该数字渲染到新的表面上:

def draw_font(self, string, position, bold=False):
    font = pg.font.SysFont(self.font, 25, bold=bold)
    textSurface = font.render(string, False, self.colors['text'])
    self.update(textSurface, position)

然后我将该表面传输到显示器上,并更新显示器的该部分:

def update(self, surface, position):
    rect = pg.Rect(position[0], position[1], 25, 25)
    color = self.display.get_at(position)
    self.display.fill(color, rect)
    self.display.blit(surface, position)
    pg.display.update(rect)

这个过程确实运行良好,屏幕上的数字按照我的预期更新。 但是,如果我尝试与显示器进行交互,例如:单击显示器外部,尝试移动显示器,甚至只是最小化显示器,那么 pygame 窗口就会冻结。

我需要做哪些不同的事情才能使我的显示器更易于使用?

python graphics pygame freeze blit
1个回答
1
投票

您必须在递归函数中处理事件。分别参见

pygame.event.get()
pygame.event.pump()
:

对于游戏的每一帧,您都需要对事件队列进行某种调用。这确保您的程序可以在内部与操作系统的其余部分进行交互。

在递归函数开始时调用

pygame.event.pump()

© www.soinside.com 2019 - 2024. All rights reserved.