Pygame, экран обновляется только при выходе из окна pygame?

Я новичок в pygame, и мне нужна была помощь, потому что мой код не работает должным образом.

Хорошо, вот в чем проблема: я хочу, чтобы экран стал белым, когда я запускаю его, но он остается черным, однако, когда я нажимаю на выход, он становится белым примерно на секунду, а затем закрывается.

Это также происходит, когда я помещаю изображение (например, player.png), оно появляется примерно на секунду перед выходом. Я не знаю, что делаю не так,

помогите пожалуйста исправить код и объясните почему это происходит?

вот код:

import pygame

pygame.init()

screen = pygame.display.set_mode((640,480))
image = pygame.image.load('player.png')
gameExit = False
gameLoop = True

pygame.display.update()
white = (255,255,255)

while not gameExit:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
        gameExit = True

    for event in pygame.event.get():
        screen.fill(white)







pygame.display.update()




pygame.quit()
quit()

PS. У меня нет ошибок


person Pitu    schedule 02.07.2015    source источник


Ответы (2)


Python чувствителен к отступам. В коде вы вызываете pygame.display.update() только после завершения основного цикла.

Кроме того, вы окрашиваете фон в белый цвет только в том случае, если в очереди событий есть событие между двумя for циклами, а затем вы заполняете фон для каждого события в очереди.

Обратите внимание, что это также может привести к ситуации, когда ваше событие QUIT будет «поглощено» вторым циклом.


Так что это

while not gameExit:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
        gameExit = True

    for event in pygame.event.get():
        screen.fill(white)

pygame.display.update()

должно быть

while not gameExit:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            gameExit = True

    screen.fill(white)

    pygame.display.update()
person sloth    schedule 02.07.2015
comment
Большое спасибо за вашу помощь :), я очень ценю, что вы это объяснили. - person Pitu; 02.07.2015

Хорошо, поэтому я согласен с Ленивцем, но вместо того, чтобы выполнять все обновления экрана, заполнение и копирование в конце, что делает сценарий менее читаемым, вы должны сделать что-то вроде функции animate, которая запускается каждый раз в конце цикла while, и поместите в эту функцию блиттинг и обновление экрана. Извините за прерванный приговор.

Да и ваша переменная GameLoop не нужна.

person Henry    schedule 03.07.2015