Переход от ООП к ECS при разработке игр
Когда-то у меня было мало опыта в разработке и я решил - буду делать игру, используя ООП.
Это ведь популярная парадигма разработки.
И сделал. Я придумал достаточно оригинальную идею игры, реализовал базовую механику за пару недель и убедился что игра жизнеспособна.
И сразу же понял что с кодом что то не так:
Взаимодействие между кучей объектов оказалось не гибким - нужно было изобретать способы передачи одних объектов в другие.
Трудно было понять общую картину зависимостей.
Изменение логики требовало больших усилий.
По мере добавления новых идей и механик, разработка превращалась в пытку.
В этот момент я понял что делаю что то не так и убрал проект в ящик.
Спустя несколько лет я накопил опыта и познакомился с паттерном ECS (Entity-Component-System). Он решает задачу улучшения гибкости, модульности и производительности систем. Вспомнил про игру и пошёл искать библиотеку ECS для python (игра на нем).Сущеуствующие библиотеки ECS для python оказались не идеальны, если сказать мягко.
В итоге я написал свою реализацию:
https://github.com/ikvk/ecs_pattern
https://pypi.org/project/ecs-pattern/
И воспользовался ей для создания своей игры.
Использование ECS дало свои плоды: писать код стало в удовольствие, появилась гибкость и модульность.
ECS для разработки игр прекрасен на любом языке.
Если вы делаете игру, для которой не нужна видеокарта, вам может пригодиться мой опыт.
В репозитории бибилотеки ecs_pattern есть краткие доки, пример использования на примере моей игры и еще пара полезных примеров.
На низкоуровневых языках ECS решает задачу оптимизации использования ресурсов, но это уже совсем другая история.
*Игра называется "Trig fall", размещена в rustore, vkplay, appgallery.
Спасибо за внимание :)
