видеосистема не инициализирована - PullRequest
0 голосов
/ 15 апреля 2020

Когда я запускаю следующий код, я получаю сообщение об ошибке. В большинстве других подобных постов говорится о pygame.quit () sys.exit (), который у меня есть, но все равно вижу ошибку

import pygame, sys, math
pygame.init()
size = width, height = 600, 400
screen = pygame.display.set_mode((width, height))
ball = pygame.image.load("GolfBall.png").convert_alpha()
ball_rect= ball.get_rect()
is_playing= True
while is_playing:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            is_playing= False
        screen.fill((0,0,0))
        screen.blit(ball, ball_rect)
        pygame.display.flip()
        pygame.time.wait(20)
    pygame.quit()
sys.exit()

Ошибка

Traceback (most recent call last):
  File "C:/Users/.............................", line 10, in <module>
    for event in pygame.event.get():
pygame.error: video system not initialized

Ответы [ 2 ]

1 голос
/ 15 апреля 2020

pygame.quit() должно быть вне l oop:

import pygame, sys, math
pygame.init()
size = width, height = 600, 400
screen = pygame.display.set_mode((width, height))
ball = pygame.image.load("GolfBall.png").convert_alpha()
ball_rect= ball.get_rect()
is_playing= True
while is_playing:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            is_playing= False
        screen.fill((0,0,0))
        screen.blit(ball, ball_rect)
        pygame.display.flip()
        pygame.time.wait(20)
pygame.quit()
sys.exit()

В противном случае после первой итерации l oop будет вызван pygame.quit(), а на второй итерации произошла ошибка.

0 голосов
/ 15 апреля 2020

Вы должны заботиться о отступе

В то время как pygame.quit() должно быть сделано после основного заявления l oop (как упомянуто в другом ответе и комментариях), рисунок Сцена и обновление дисплея должны выполняться в основном приложении l oop, а не в событии l oop:

import pygame, sys, math
pygame.init()
size = width, height = 600, 400
screen = pygame.display.set_mode((width, height))
ball = pygame.image.load("GolfBall.png").convert_alpha()
ball_rect= ball.get_rect()

# application loop
is_playing= True
while is_playing:

    # event loop
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            is_playing= False

    #<--| INDENTATION

    # draw the scene
    screen.fill((0,0,0))
    screen.blit(ball, ball_rect)
    pygame.display.flip()

    pygame.time.wait(20) 

#<--| INDENTATION

# quit pygame   
pygame.quit()
sys.exit()

Обратите внимание, что событие l oop выполняется один раз для каждое событие, но приложение l oop выполняется один раз для каждого кадра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...