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

希望这对您有所帮助:)