Pygame Python窗口停止响应

时间:2018-10-01 23:08:30

标签: python pygame

美好的一天。我在Python 3.6.5中使用Pygame。这是我的代码:

if event.type == pygame.KEYDOWN:
                if pygame.key == pygame.K_UP:
                    my_change = -15

my += my_change

pygame.display.update()
clock.tick(24)

我的问题是,当我添加

running = True
while running: 

在该代码的顶部,然后运行它,即使我添加了 2行代码!

,我的窗口也停止了响应。

P.S:我还没有代码可以打破 的局面。这可能是其原因之一吗?不过,我会在代码的后面缩进 ,因此它只能运行很短的一段时间。另外:这实际上是在我的主游戏循环中。另外:我的精灵Super Mario刚好跌入了我的视野。

关于此和/或如何解决此问题的任何帮助或想法?

谢谢!

2 个答案:

答案 0 :(得分:1)

尝试在您的

之前添加for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
                if pygame.key == pygame.K_UP:
                    my_change = -15

因此它变为:

running = True
while running:
    for event in pygame.event.get():
         if event.type == pygame.KEYDOWN:
                if pygame.key == pygame.K_UP:
                    my_change = -15

根据Pygame Documentation,“ Pygame通过事件队列处理其所有事件消息。此模块中的例程可帮助您管理该事件队列。输入队列在很大程度上取决于pygame显示模块。显示尚未初始化且未设置视频模式,事件队列将无法真正工作。”

通过调用“ pygame.event.get()”,“这将获取所有消息并将其从队列中删除。如果给出类型或类型序列,则仅将这些消息从队列中删除。

如果仅从队列中提取特定事件,请注意队列最终可能会填充您不感兴趣的事件。”

答案 1 :(得分:0)

我认为这是您的循环问题。

在pygame循环中:

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
    pygame.display.update()

如您所见,这是一个无限循环。然后,问题发生在这里:

running = True
while running:
    if event.type == pygame.KEYDOWN:
        if pygame.key == pygame.K_UP:
            my_change = -15

以此,您可以在主循环中创建另一个无限循环。因此,此代码将永远无法更新pygame窗口(因为它被困在嵌套循环中)。

请记住,在pygame中进行更新仅应执行一次操作。因为该操作将对主游戏循环中的每个循环重复进行。考虑到这一点,请尝试修改您的代码。现在,无论我们如何安排,您的代码都将无法正常工作。

提示: 对于角色运动,我认为最常见的方法是创建一个类来处理您的角色,并为其添加功能以更新其位置。

可能的解决方法: 将运行中移动到事件循环之外。然后,在您的keydown事件中添加运行作为另一项检查。

running = True
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()

        if running and event.type == pygame.KEYDOWN:
            if pygame.key == pygame.K_UP:
                my_change = -15
    my += my_change
    pygame.display.update()