Не отрисовывается объект при работе в pygames

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

game.py

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_lengh, ai_settings.screen_height))
    pygame.display.set_caption("Alien Invasion")
    ship = Ship(screen)
    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()

ship.py

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)

settings.py

class Settings():
    def __init__(self):
        self.screen_lengh = 1200
        self.screen_height = 800
        self.bg_color = (10,30,40)

Ответы (1 шт):

Автор решения: S. Nick

Все работает правильно. Проверьте изображение и путь к нему. Экран у меня меньше чем у вас, обратите на это внимание.

import sys
import pygame


#from settings import Settings
class Settings():
    def __init__(self):
        self.screen_lengh = 1200
        self.screen_height = 600                                   # 800
        self.bg_color = (10, 30, 40)
                

#from ship import Ship
class Ship():
    def __init__(self,screen):
        self.screen = screen
        self.image = pygame.image.load("images/ship.bmp")         
        self.rect = self.image.get_rect()
        print(f'self.rect 1      -> {self.rect}')                  # +
        self.screen_rect = screen.get_rect()
        print(f'self.screen_rect -> {self.screen_rect}')           # +
        self.rect.centerx = self.screen_rect.centerx
        self.rect.bottom = self.screen_rect.bottom
        print(f'self.rect 2      -> {self.rect}')                  # +
    def blitme(self):
        self.screen.blit(self.image, self.rect)
        

def run_game():
    pygame.init()
    ai_settings = Settings()
    screen = pygame.display.set_mode((ai_settings.screen_lengh, ai_settings.screen_height))
    print(f'\nscreen           -> {screen}')                       # + 
    
    pygame.display.set_caption("Alien Invasion")
    ship = Ship(screen)
    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()

введите сюда описание изображения

ship.bmp

введите сюда описание изображения

→ Ссылка