pygame.error: видеосистема не инициализирована (Alien Invasion) - PullRequest
0 голосов
/ 17 марта 2020

В настоящее время я следую учебнику по python для книги и наконец-то приступил к созданию игры. После ввода каждого кода вручную

Игра (Alien Invasion)

import sys

import pygame

from settings import Settings
from ship import Ship

def run_game():
    pygame.init()
    ai_settings = Settings()
    screen = pygame.display.set_mode(
        (ai_settings.screen_width, ai_settings.screen_height))
    pygame.display.set_caption("Alien Invasion")

    ship = Ship(screen)

bg_color = (230, 230, 230)

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
    screen.fill(ai_settings.bg_color)
    ship.blitme()

    pygame.display.flip()

run_game()

Настройки:

class Settings():

    def __init__(self):
        self.screen_width = 1200
        self.screen_height = 800
        self.bg_color = (230, 230, 230)

Корабль:

import pygame

class Ship():

    def __init__(self, screen):
        self.screen = screen

        self.image = pygame.image.load('images/ship.bmp')
        self.rect = self.image.get_rect()
        self.screen_rect = screen.get_rect()

        self.rect.centerx = self.screen_rect.centerx
        self.rect.bottom = self.screen_rect.bottom

    def blitme(self):
        self.screen.blit(self.image, self.rect)

I продолжаю получать эту ошибку

Traceback (most recent call last):
  File "/Users/ff/Desktop/alien invasion/alien_invasion.py", line 21, in <module>
    for event in pygame.event.get():
pygame.error: video system not initialized

Я убедился, что каждая строка и отступ вставлены правильно. Кто-нибудь знает, как это исправить?

----- edit -----

Ошибка инициализации Pygame исправлена ​​после того, как я переместил pygame.init() за пределы, пока l oop , но теперь он говорит

Traceback (most recent call last):
  File "/Users/ff/Desktop/alien invasion/alien_invasion.py", line 27, in <module>
    screen.fill(ai_settings.bg_color)
NameError: name 'screen' is not defined

1 Ответ

1 голос
/ 17 марта 2020

Ваша функция run_game() вызывается после того, как вы l oop, поэтому ваши модули pygame не были инициализированы до того, как вы начали искать события. Попробуйте переместить его раньше, пока l oop.

Редактировать: Если вы хотите получить доступ к screen, ai_settings и ship вне вашей функции run_game(), вам нужно будет отредактировать ваш код, подобный этому:

def run_game():
    pygame.init()
    ai_settings = Settings()
    screen = pygame.display.set_mode(
        (ai_settings.screen_width, ai_settings.screen_height))
    pygame.display.set_caption("Alien Invasion")

    ship = Ship(screen)

    return screen, ai_settings, ship

bg_color = (230, 230, 230)

screen, ai_settings, ship = run_game()

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
    screen.fill(ai_settings.bg_color)
    ship.blitme()

    pygame.display.flip()

Заметными частями являются линии

    return screen, ai_settings, ship

и

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