Добавляем игрока
Теперь добавим космический корабль. В PyGame, для любых перемещающихся объектов, которые могут взаимодействовать с другими удобно описать собственный класс, который будет наследоваться от встроенного класса Sprite
. Спрайты можно рисовать, двигать, уничтожать и удобно объединять в группы.
Класс - это описание некоторой сущности, по сути - чертеж объекта. В нем описывается, какие свойства будут у объекта и какие действия он будет уметь совершать.
Давайте попытаемся описать класс для космического корабля и нарисовать его. В классе нам потребуется описать конструктор (для инициализации стартовых параметров), функции для рисования и перемещения корабля. Кстати, нам снова понадобится прозрачная картинка для корабля, можно поискать по запросу starship 2d asset или взять нашу.
import pygame
from pygame.transform import scale
# описываем класс "космический корабль", расширяющий встроенный класс Sprite
class Spaceship(pygame.sprite.Sprite):
# конструктор - функция, в которую мы передаем начальные координаты
def __init__(self, x, y):
# инициализируем спрайт
pygame.sprite.Sprite.__init__(self)
# выбираем прямоугольную область размера 50 на 100
self.rect = pygame.Rect(x, y, 50, 100)
# загружаем картинку с кораблем
self.image = scale(pygame.image.load("ship.png"), (50, 100))
# задаем начальную скорость по оси x
self.xvel = 0
# функция рисования корабля
def draw(self, screen):
# рисуем корабль на экране на месте занимаемой им прямоугольной области
screen.blit(self.image, (self.rect.x, self.rect.y))
# функция перемещения, параметры - нажата ли стрелочки влево и вправо
def update(self, left, right):
# если нажата клавиша влево, уменьшаем скорость
if left:
self.xvel -= 3
# если нажата клавиша вправо, увеличиваем скорость
if right:
self.xvel += 3
# если ничего не нажато - тормозим
if not (left or right):
self.xvel = 0
# изменяем координаты на скорость
self.rect.x += self.xvel
pygame.init()
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("Asteroids")
sky = scale(pygame.image.load("sky.jpg"), (800, 600))
# создаем корабль в точке 400 400
ship = Spaceship(400, 400)
while True:
for e in pygame.event.get():
if e.type == pygame.QUIT:
raise SystemExit("QUIT")
# рисуем небо
screen.blit(sky, (0, 0))
# просим корабль нарисоваться
ship.draw(screen)
pygame.display.update()