每当我启动程序时,外壳程序都会工作,但是pygame窗口会立即停止响应。我以前在pygame上画过东西,但这是第一次发生。没有错误消息,只是当我将光标悬停在它上面时,它是正在加载的符号,不久后,窗口要求我等待或停止该程序。 (我在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()
答案 0 :(得分:1)
执行此操作时:
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
s。
如果您完成任何PyGame教程,将有一节介绍延迟游戏逻辑的方法,该方法并不涉及整个程序的挂起。两个主要选项是编写一个框架循环(无论什么情况,每秒更新X次),或编写一个事件循环(每当操作系统说有事件发生时,它都会更新)。然后,除了sleep(5)
之外,您还必须跟踪何时要执行下一件事,继续循环以及在达到该时间时要做下一件事。
这意味着input
和PyGame通常不能很好地一起玩。您可以通过使用后台线程或使用非阻塞的stdin或其他方式来强制使其发挥良好,但没有微不足道的解决方案。 (大多数游戏和大多数GUI都是从图形窗口而不是从控制台获取输入。)