繁体   English   中英

为什么我的 pygame window 冻结并崩溃?

[英]Why does my pygame window freeze and crash?

每当我尝试运行我的程序时,它都会冻结并崩溃。 我不是 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()

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

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()

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

除非你试图这样做?

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

与上述相同

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM