每当我启动程序时,shell都会起作用,但是pygame窗口会立即停止响应。我以前在pygame上画过东西,但这是第一次发生。没有错误消息,只是当我将光标悬停在它上面时,它是正在加载的符号,并且过一会儿,Windows要求我等待或停止该程序。 (我在javascript中使用了代码段,但代码在python中。对不起,我的新手编码布局。)

import pygame
from time import sleep
def multitype(string, whole_str_time):
    len_of_str = len(string)
    no_of_character = 0
    secs_bet_let = whole_str_time / len_of_str
    while no_of_character != len_of_str - 1:
        print(string[no_of_character], end = '')
        no_of_character += 1
        sleep(secs_bet_let)
    print(string[no_of_character])
pygame.init()
black = (0,0,0)
white = (255,255,255)
playercoords_a = (275,425)
playercoords_b = (275,475)
playercoords_c = (225,475)
playercoords_d = (225,425)
playertotalcoords = (playercoords_a, playercoords_b, playercoords_c, playercoords_d)
windowSurface = pygame.display.set_mode((500, 500),0,32)
windowSurface.fill((0,0,0,))
xmod = 0
ymod = 0
pygame.draw.polygon(windowSurface,white,((275,425),(275,475),(225,475),(225,425)))
pygame.display.update()
sleep(5)
multitype('type up to go up, left to go left, right to go right and down to go down',2)
while True:
    command = input()
    if command == 'up':
        xmod += 50
        print('updated')
    elif command == 'right':
        ymod += 50
        print('updated')
    elif command == 'left':
        ymod -= 50
        print('updated')
    elif command  == 'down':
        xmod -= 50
        print('updated')
    else :
        print('invalid instruction')
    pygame.draw.polygon(windowSurface,white,((275 + xmod,425 + ymod),(275 + xmod,475 + ymod),(225 + xmod,475 + ymod),(225 + xmod,425 + ymod)))
    pygame.display.update()

最佳答案

执行此操作时:

sleep(5)


…您要让整个口译员进入睡眠状态5秒钟,在此期间它无法响应任何事件,更新屏幕或执行其他任何操作。

然后调用此函数:

multitype('type up to go up, left to go left, right to go right and down to go down',2)


…一次也可以执行几秒钟sleep而不处理事件。

然后,您进入等待input()的循环。只要它在等待键盘输入,它就不再处理事件。

忽略事件和更新几秒钟后,Windows将检测到该程序没有响应,并询问您是否要等待或停止该程序。

如果您希望您的应用程序具有响应能力,则需要处理事件并至少每秒每秒几次调用pygame.display.update()。这意味着分解很长的sleep

如果您完成任何PyGame教程,都会有一节介绍延迟游戏逻辑的方法,这些方法并不涉及整个程序的挂起。两个主要选项是编写一个框架循环(无论什么情况,每秒更新X次),或编写一个事件循环(每当操作系统说有事件发生时,它都会更新)。然后,除了sleep(5)之外,您还必须跟踪何时要执行下一件事,继续循环以及在达到该时间时要做下一件事。

这意味着input和PyGame通常不能很好地玩在一起。您可以通过使用后台线程或通过使用非阻塞标准输入或其他方式来强制它们良好地播放,但是对此没有微不足道的解决方法。 (大多数游戏和大多数GUI都是从图形窗口而不是从控制台获取输入。)

关于python - pygame窗口运行后停止响应,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51715236/

10-14 18:16