Pygame window 使用线程时冻结
Pygame window freezes when using threads
我有一个 pygame 脚本,它以白屏启动,然后在用户键入内容时转换为黑屏。用户输入由另一个线程处理,我使用 queue.Queue
将消息从输入线程传递到 pygame 线程。
问题是每当我 运行 脚本 pygame window 会在片刻后冻结。如果我快速输入内容,屏幕将从白色变为黑色,但 window 仍然冻结。我不确定脚本卡在哪里?
import pygame
import threading
import queue
q = queue.Queue()
pygame.init()
#rgb codes
black = (0, 0, 0)
white = (255, 255, 255)
game_display = pygame.display.set_mode((800, 800))
def screen_1():
crashed = False
#holds messages from input thread
msg = ''
game_display.fill(white)
while not crashed:
#check if there are any messages in the queue
try:
msg = q.get(False)
except queue.Empty:
pass
if msg:
return screen_2()
for event in pygame.event.get():
if event.type == pygame.QUIT:
crashed = True
pygame.display.update()
def screen_2():
crashed = False
game_display.fill(black)
while not crashed:
for event in pygame.event.get():
if event.type == pygame.QUIT:
crashed = True
pygame.display.update()
def inputFunc():
msg = input('Type something:\n')
q.put(msg)
t1 = threading.Thread(target = screen_1)
t2 = threading.Thread(target = inputFunc)
t1.start()
t2.start()
好的,我刚刚发现 运行 线程中的 pygame 位导致 window 冻结。如果我只为 inputFunc
创建一个线程并调用 screen_1
一切正常。
我有一个 pygame 脚本,它以白屏启动,然后在用户键入内容时转换为黑屏。用户输入由另一个线程处理,我使用 queue.Queue
将消息从输入线程传递到 pygame 线程。
问题是每当我 运行 脚本 pygame window 会在片刻后冻结。如果我快速输入内容,屏幕将从白色变为黑色,但 window 仍然冻结。我不确定脚本卡在哪里?
import pygame
import threading
import queue
q = queue.Queue()
pygame.init()
#rgb codes
black = (0, 0, 0)
white = (255, 255, 255)
game_display = pygame.display.set_mode((800, 800))
def screen_1():
crashed = False
#holds messages from input thread
msg = ''
game_display.fill(white)
while not crashed:
#check if there are any messages in the queue
try:
msg = q.get(False)
except queue.Empty:
pass
if msg:
return screen_2()
for event in pygame.event.get():
if event.type == pygame.QUIT:
crashed = True
pygame.display.update()
def screen_2():
crashed = False
game_display.fill(black)
while not crashed:
for event in pygame.event.get():
if event.type == pygame.QUIT:
crashed = True
pygame.display.update()
def inputFunc():
msg = input('Type something:\n')
q.put(msg)
t1 = threading.Thread(target = screen_1)
t2 = threading.Thread(target = inputFunc)
t1.start()
t2.start()
好的,我刚刚发现 运行 线程中的 pygame 位导致 window 冻结。如果我只为 inputFunc
创建一个线程并调用 screen_1
一切正常。