26.03.2023
статья
Документация! PyEngine - 1.1

Всем привет!

Сегодня я напишу полную документацию по всем классам, их атрибутам и функциям! Из-за предстоящего "экзамена" (ВПР) постов скорее всего не будет  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, наверное). Если хотите больше обновлений, то...    ждите их. Но лайк тоже можете поставить. И тогда хотя бы мои моральные силы вернутся.

Всем пока!

Документация! PyEngine - 1.1
Комментарии (1)
согл впр все портит