Pygame 嵌套 while 循环:[Errno 10054] 现有连接被远程主机强行关闭
Pygame nested while loop: [Errno 10054] An existing connection was forcibly closed by the remote host
我将 pygame 与 pyscripter 和 pyopengl 一起使用,并试图在主 while 循环中放置一个 while 循环,但是一旦游戏进入内部循环,它就会永远重复循环,我出不去
running = True
while running:
keys=pygame.key.get_pressed()
## do game stuff
if keys[K_l]:
a=True
while a:
keys2=pygame.key.get_pressed()
## do something
print a
if keys2[K_p]:
a = False
break
for event in pygame.event.get():
if event.type == pygame.QUIT or keys[K_ESCAPE]:
running = False
pygame.quit()
sys.exit()
按 l 后,即使我按 p
也会连续打印 True
如何退出内部循环?
您需要在内部 while
循环中 调用 pygame.event.pump()
以确保您的程序可以在内部与操作系统的其余部分进行交互。
# ....
while a:
pygame.event.pump()
keys2 = pygame.key.get_pressed()
# do something ...
另一种方法是 在游戏循环的事件队列中监听 pygame.KEYDOWN
事件:
running = True
l_KeyPressed = False
while running:
# get events from the queue
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN :
if event.key == pygame.K_SPACE:
running = False
if event.key == pygame.K_l:
# do something
l_KeyPressed = True
if event.key == pygame.K_p and lPressed:
l_KeyPressed = False
希望这对您有所帮助:)
我将 pygame 与 pyscripter 和 pyopengl 一起使用,并试图在主 while 循环中放置一个 while 循环,但是一旦游戏进入内部循环,它就会永远重复循环,我出不去
running = True
while running:
keys=pygame.key.get_pressed()
## do game stuff
if keys[K_l]:
a=True
while a:
keys2=pygame.key.get_pressed()
## do something
print a
if keys2[K_p]:
a = False
break
for event in pygame.event.get():
if event.type == pygame.QUIT or keys[K_ESCAPE]:
running = False
pygame.quit()
sys.exit()
按 l 后,即使我按 p
也会连续打印True
如何退出内部循环?
您需要在内部 while
循环中 调用 pygame.event.pump()
以确保您的程序可以在内部与操作系统的其余部分进行交互。
# ....
while a:
pygame.event.pump()
keys2 = pygame.key.get_pressed()
# do something ...
另一种方法是 在游戏循环的事件队列中监听 pygame.KEYDOWN
事件:
running = True
l_KeyPressed = False
while running:
# get events from the queue
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN :
if event.key == pygame.K_SPACE:
running = False
if event.key == pygame.K_l:
# do something
l_KeyPressed = True
if event.key == pygame.K_p and lPressed:
l_KeyPressed = False
希望这对您有所帮助:)