Всем привет!
Сегодня я напишу полную документацию по всем классам, их атрибутам и функциям! Из-за предстоящего "экзамена" (ВПР) постов скорее всего не будет 2-3 недели. И ещё, небольшая новость. Разработка Farformer ненадолго приостановлена. Зато у меня есть 2 неплохие идеи для других игр (и одна уже воплощается в реальность), так что примерно почти через месяц ждите новости! Вот новая версия движка. В ней исправлены пару багов.
Для начала, немного о самом движке
Рассказывать тут особо нечего. В нём 373 строки, полноценный релиз был 29.01.2023. На данный момент он насчитывает 6 классов и 2 функции. Использует набор модулей pygame, как ядро или основа.
1) Функции
Их всего две:
- text - возвращает
pygame.Surface с текстом по параметрам
- directionMove - уже устаревшая функция. Она передвигает
pygame.Rect по заданным углу и скорости
2) Класс Camera
Довольно простой класс. В параметрах можно указать game, но пока он нигде не используется, поэтому просто пишем None. Если вы не используете класс Game (правда тогда я не знаю, зачем вам вообще мой движок), то в координатах функции blit нужно обязательно поставить:
screen.blit(image, (rect.x - camera.x, rect.y - camera.y))
Атрибуты:
- x - координата x
- y - координата y
В остальном из атрибутов ничего не нужно.
Функции:
Она всего одна - lookAt
Эта функция заставляет камеру следить за определённой позицией. Параметр smooth определяет плавность движения. Я рекомендую ставить 20 или 30. Если же хотите, чтобы камера была "приклеена" к этой позиции, ставьте 1.
3) Класс AnimationImage
Довольно обширный класс, позволяющий делать покадровые анимации к объектам.
Атрибуты:
- animation - нынешняя анимация
- animationImage - нынешний кард анимации
- animations - все анимации
Остальное, думаю, вам не пригодится.
Функции:
- loadAnimationFromFile - позволяет загружать анимации из отдельного файла. Здесь об этом рассказываю
- update - обновляет анимацию. Если не используете класс Sprite, то в цикле обязательно указывать
- addAnimation - добавляет анимацию по названию
- addFrame - добавляет один кард к анимации. Есть возможность установить задержку (правда в попугаях, но всё же) - это параметр delay
- setAnimation - устанавливает анимацию. Нужно указать название и кадр, с которого начнётся анимация
- flip - переворачивает все изображения анимации.
- activateAnim - ставит анимацию на одну итерацию. То есть, когда цикл повторно вызовет функцию update, то установится старая анимация. В параметрах её тоже нужно указать.
- trigger - вернёт True, если нынешняя анимация и кадр совпадают с указанными.
Вроде на этом всё...
4) Класс Transition
Этот класс позволяет вам сделать классные, плавные и очень разнообразные переходы между сценами. В нём нет атрибутов, которые вам понадобятся в использовании.
А вот функции есть:
- update - обновляет переход. Использовать нужно в любой сцене/цикле, где должен быть этот переход, так как сам класс не прикреплён к Game.
- setScene - устанавливает нужную сцену по её названию
- reload - пересоздаёт анимации, при этом теряя старые. Использовать не обязательно
- loadFrames - загружает анимацию перехода. В параметрах нужно указать тип. Есть всего два - custom и fade. Если используете первый тип, то вам нужно будет указать массив (список) с кадрами для перехода. А если же второй, то ввести можно просто пустой массив - []
5) Класс Renderer
Этот класс служит для отрисовки всех объектов
Из нужных атрибутов лишь один - display. Это собственно pygame.Surface. Может понадобиться, если вы рисуете примитивы с помощью pygame.draw
Функции:
- update - обновляет экран, рисует его на окне, ставит задержку по кардам в секунду. В параметре clock можно указать атрибут класса Game - clock
- setGlowRenderer - устанавливает рендер света. Обязательно нужно указать изображение света. В галерее оставлю довольно хорошее.
- glow - ставит свет в определённом месте, правда пока не поддерживает камеру. В параметрах есть позиция, радиус и цвет
- fill - заполняет экран нужным цветом
- draw - рисует pygame.Surface на экране
- drawSprite - рисует экземпляр класса Sprite
- drawSpriteGroup - рисует группу спрайтов
- particle - создаёт частицы. Подробнее про эту технологию рассказывал здесь. Может хоть после этого тот пост наберёт лайки...
- particleUpdate - обновляет частицы из определённого массива
6) Класс Sprite
Один из главных классов движка.
Атрибуты:
- image - экземпляр класса AnimationImage, про который вы прочитали до этого
- rect - просто
pygame.Rect
- velocity - это двухмерный вектор. Если хотите, то в будущем могу рассказать пару фич, связанных с их использованием. Ну а здесь это просто скорость объекта.
- collisions - передаёт столкновение объектов. Может использоваться только с physics
- physics - физика объектов. На самом деле, этот параметр просто не даёт зайти этому спрайту на другой. Чтобы включить её, напишите это:
Sprite().physics = [True, <список спрайтов>]
Если вы используете группы спрайтов класса Game, то просто впишите во второй параметр:
Game().spriteGroups[<название группы>]
|
Теперь о функциях. Она всего одна - update. Она, как бы это ни было странно, обновляет спрайт! Как уже говорил раньше, у атрибута image не нужно вызывать функцию update, если используете update этого класса. А вот уже у этого класса не обязательно вызывать функцию update, если вы используете функцию update класса Game и, соответственно, группы спрайтов.
Как же много функций update...
7) Класс Game
Это самый главный класс в игре.
Атрибуты:
- scenes - все сцены
- scene - нынешняя сцена
- spriteGroups - все группы спрайтов
- renderer - экземпляр класса Renderer, про который я опять же писал чуть раньше.
- keys - кнопки клавиатуры
- camera - экземпляр класса Camera и бла бла бла
- clock -
pygame.Clock
Функции:
Их я решил поделить на 3 группы:
1. Основные
- update - обновляет экран. Однако здесь не используется game.renderer.update, поэтому вам нужно писать его вручную
- addScene - добавляет сцену
- setScene - устанавливает сцену по её названию
- start - запускает игру
- stop - останавливает игру
2. Всё, что связанно с группами спрайтов:
- addSpriteGroup - добавляет группу спрайтов
- addSpriteToGroup - добавляет спрайт в группу
- addListToGroup - добавляет список из спрайтов в группу
- clearAllSpriteGroups - очищает все группы спрайтов. Подойдёт для тех, кто делает игру с рендером с помощью тайлов
3. Теперь о столкновении спрайтов. Они все возращают True, если:
- collisionSprites - сталкиваются два спрайта
- collisionSpriteWithGroup - сталкивается группа со спрайтом
- collisionGroupWithGroup - идёт эпичное противостояние между двумя группами, и один спрайт из первой группы сталкивается с другим из второй группы
- collisionMasks - столкновение происходит с помощью масок. Это довольно сильно бьёт по производительности, поэтому лучше используйте с collisionSprites.
Фух. Наконец-то я закончил (писал где-то часа 3-4, наверное). Если хотите больше обновлений, то... ждите их. Но лайк тоже можете поставить. И тогда хотя бы мои моральные силы вернутся.
Всем пока!