我有这样的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窗口在函数运行时保持更新?
您可能必须使用线程或多处理,因为您必须理解为什么您的主要渲染函数是‘冻结’。
这意味着,虽然main方法总是在循环中快速地呈现所有内容,以至于看不到draw()方法需要多长时间来计算新场景,但stuff()或condition方法需要多长时间来计算结果变得很明显。 您用于绘图的主循环冻结了,因为从stuff()中计算内部while循环需要很长时间才能完成。 这是我的假设。
发生这种情况是因为你按顺序编程。 要解决这个问题,您需要将stuff()函数放入它自己的程序空间--或者更好的进程空间,这通常用线程来完成,线程是主进程的子进程。
另一方面,您可以尝试加快stuff()方法的速度。