【问题标题】:Why does my pygame window freeze and crash?为什么我的 pygame 窗口冻结并崩溃?
【发布时间】:2020-07-22 06:41:21
【问题描述】:

每当我尝试运行我的程序时,它都会冻结并崩溃。我不是 pygame 编码大师,但我几乎可以肯定这与我的主循环有关。它应该允许用户使用箭头键左右移动。我尝试添加时钟并更改屏幕大小,但没有奏效。代码如下:

import pygame
import sys
import random 
import time

pygame.init()
screen = pygame.display.set_mode((500,500))

events = pygame.event.get()
clock = pygame.time.Clock()

x = 50
y = 50

game_over = False
while not game_over:
    for event in events:
        if event.type != pygame.QUIT:

            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_RIGHT:
                    x += 5
                elif event.key == pygame.K_LEFT:
                    x -= 5

        else:
            sys.exit()

    
    screen.fill((0,0,0))
    pygame.draw.rect(screen, (255,255,255), (x,y,50,50))
    clock.tick(30)
    pygame.display.update()

【问题讨论】:

  • 是否可以将 Python 生成的错误信息包含在内?

标签: python pygame


【解决方案1】:

代码需要连续处理事件队列,否则你的操作环境会认为你的窗口没有响应(锁定)。您的代码几乎就在那里,除了它只获取一次新事件,但这需要在主循环的每次迭代中完成。

import pygame
import sys

pygame.init()
screen = pygame.display.set_mode((500,500))
clock = pygame.time.Clock()

x = 50
y = 50

game_over = False
while not game_over:
    events = pygame.event.get()                   # <<-- HERE handle every time
    for event in events:                     
        if event.type != pygame.QUIT:

            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_RIGHT:
                    x += 5
                elif event.key == pygame.K_LEFT:
                    x -= 5
        else:
            sys.exit()
    
    screen.fill((0,0,0))
    pygame.draw.rect(screen, (255,255,255), (x,y,50,50))
    clock.tick(30)
    pygame.display.update()

【讨论】:

  • 感谢您告诉我!我通常不会将事件放在他们自己的列表中,但对于这个项目,它会更容易。无论如何,谢谢!
【解决方案2】:

你不能做foe event in events,当你调用pygame.events.get()时,你正在更新它们,你更新它们一次并在每一帧循环它们,你需要使用for event in pygame.event.get():所以你在每一帧调用函数并更新每一帧的事件

除非你试图这样做?

events = pygame.event.get
...
for event in events():

和上面一样

【讨论】:

  • 谢谢!我试图在列表中获取事件,主要原因是我可以输入for event in events: 而不是for event in pygame.event.get():,但也可以使用其他方式!下次我会记住的!
猜你喜欢
  • 1970-01-01
  • 2020-03-26
  • 1970-01-01
  • 1970-01-01
  • 2013-12-09
  • 2015-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多