提问者:小点点

Pygame窗口从函数运行时不更新?


我有这样的pygame代码(显然不是我的实际代码,因为它有点长):

def draw():
    win.fill(color)
    <code for drawing stuff>
    pygame.display.update()

def stuff():
    while doingStuff:
       <some lines of code>
       draw()

win = pygame.display.set_mode((width,height))
while True:
    <some lines of code>
    if conditionMet:
       stuff()
    draw()

问题是当“stuff”函数运行时,pygame窗口会冻结,直到它离开该函数时才会更新。 我认为draw函数是正确的,因为只要它不在函数中,它就可以正常运行。

我如何使pygame窗口在函数运行时保持更新?


共1个答案

匿名用户

您可能必须使用线程或多处理,因为您必须理解为什么您的主要渲染函数是‘冻结’。

这意味着,虽然main方法总是在循环中快速地呈现所有内容,以至于看不到draw()方法需要多长时间来计算新场景,但stuff()或condition方法需要多长时间来计算结果变得很明显。 您用于绘图的主循环冻结了,因为从stuff()中计算内部while循环需要很长时间才能完成。 这是我的假设。

发生这种情况是因为你按顺序编程。 要解决这个问题,您需要将stuff()函数放入它自己的程序空间--或者更好的进程空间,这通常用线程来完成,线程是主进程的子进程。

另一方面,您可以尝试加快stuff()方法的速度。