Не отрисовывается объект при работе в 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

