Создаем игру с Pygame и Python. Часть 3
В предыдущей статье мы реализовали проект Pygame, в результате чего на экран выводится окно с игровым полем, которое вы можете закрыть, нажав клавишу. Но пока что, наше игровое поле отображает лишь синий экран. На следующем шаге мы используем в качестве фона изображение космического пространства. В сегодняшней статье мы отобразим изображение в этом окне.
Хотя вы могли бы сделать компьютерную игру только с цветными прямоугольниками и другими простыми фигурами, использование изображений сделает ее гораздо более привлекательной. В разработке компьютерных игр изображения обычно называются спрайтами. Конечно, игры используют гораздо больше типов ресурсов, таких как звуки, шрифты, анимация и так далее. Вместе эти ресурсы называются assets.
По мере роста вашей игры важно, чтобы она сохраняла правильную структуру. Итак, начните с создания папки под названием assets и внутри нее еще одной, называемой sprites. Там вы разместите все спрайты, используемые в вашей игре. Папку assets можно создать внутри space_rock.
Затем загрузите изображение космического фона и поместите его в папку assets/sprites.
Кроме того, поскольку изображения будут загружаться в вашу программу много раз, рекомендуется извлечь эту функциональность в отдельный метод в отдельном файле. Создайте файл с именем space_rocks/utils.py, который сохранит все многоразовые методы. Затем реализуйте загрузку изображений:
from pygame.image import load
def load_sprite(name, with_alpha=True):
# в зависимости от места запуска space_rock можно и не указывать
path = "space_rock/assets/sprites/{0}.png".format(name)
loaded_sprite = load(path)
if with_alpha:
return loaded_sprite.convert_alpha()
else:
return loaded_sprite.convert()
В первой строке мы импортирует метод load (), который будет необходим для последующего чтения изображений.
В строке path создаем путь к изображению, предполагая, что оно хранится в каталоге space_rock/assets/sprites и что это файл PNG. Таким образом, вам нужно будет только указать имя спрайта позже. В случае ошибки в загрузке, следует удалить часть пути.
Строка loaded_sprite загружает изображение с помощью функции load(). Этот метод возвращает поверхность, которая является объектом, используемым Pygame для представления изображений. Позже вы можете нарисовать его на экране (или на другой поверхности, если хотите).
Конструкция if-else преобразуют изображение в формат, который лучше подходит для экрана, чтобы ускорить процесс рисования. Это делается с помощью функции convert_alpha() или convert(), в зависимости от того, хотите ли вы использовать прозрачность.
Структура нашего проекта будет выглядеть следующим образом:
game_project/
|
├── space_rocks/
├── __main__.py
├── game.py
└── utils.py
|_
assets/
|
└── sprites/
└── space.png
Теперь, когда ваша программа может загружать изображения, пришло время изменить синий фон на что-то более интересное. Отредактируйте space_rocks/game.py файл:
import pygame
# импорт загрузчика
from utils import load_sprite
class SpaceRocks:
def __init__(self):
self._init_pygame()
self.screen = pygame.display.set_mode((800, 600))
# добавленный код
self.background = load_sprite("space", False)
..........................
def _draw(self):
# добавленный код
self.screen.blit(self.background, (0, 0))
pygame.display.flip()
Чтобы отобразить одну поверхность на другой в Pygame, Метод blit() нужно вызвать на поверхности, на которой вы хотите рисовать. Этот метод принимает два аргумента:
Поверхность, которую вы хотите нарисовать - self.background. Точка, в которой вы хотите ее нарисовать - (0, 0).
Запустим проект:
# запуск проекта
(my_progect)>>>python space_rock
И мы должны увидеть экран с изображением:
Таким образом, мы добавили нашей игре красивое фоновое изображение.
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.