Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Советы/критика архитектуры 2д движка

Советы/критика архитектуры 2д движка

emptiness_rainУчастникwww11 фев. 201813:51#0
Начал недавно пилить небольшую игру и захотелось все по уму сделать.
Пока писал редакторы и статику проблем не было, но когда приблизился к динамике - задумался, правильно ли делаю.


Начну пожалуй с хотелок, итак:
--Карта состоящая из спрайтов( уже есть редактор и рендер )
--Коллизии не зависящие от визуала но привязанные к карте( отдельно рисовать в редакторе )
--Многослойная карта с параллаксом
--Освещение статическое и динамическое
--Персонажку со скелетной и спрайтовой анимацией
--Систему частиц для взрывов дождя итд
--И самое главное расширяемость и масштабируемость, плюс удобные редакторы для всего этого


Как я себе это представляю:
--Есть сцена, в нее входит карта(ы) и список объектов( персонажи, пропсы, эффекты, триггеры, источники освещения )
--У объектов 2 метода общих, апдэйт и рендер.
--Перед рендером сцена сортирует все, что попало в камеру - по глубине( детали карты и объекты ).


А теперь собственно вопросы:
--Есть ли смысл в карте хранить изменяемые объекты( изменяемость хотя бы на уровне банальной видимости ) или все что должно изменяться выносить как объекты на уровень сцены?
--Также вопрос стоит ли хранить коллизии внутри карты, ведь есть еще коллизии объектов, не лучше ли все завязать на объекты?
--Для параллакса слои хранить внутри карты? или отдельными картами, а совмещать на уровне сцены?( логично будет завязать внутири карты, но на стыке 2х карт будет трабл, отдельно получается более гибко )


вроде пока все)

Правка: 11 фев. 2018 14:16

Aviator777Участникwww11 фев. 201817:30#1
--Также вопрос стоит ли хранить коллизии внутри карты, ведь есть еще коллизии объектов, не лучше ли все завязать на объекты?

У меня опыт по этому вопросу в основном в 3д, но думаю относиться и сюда. Мы в нашем игровом движке, строго отделили статический физический мир от всего и вся, прописывается он также отдельно в отдельном файле.

--Коллизии не зависящие от визуала но привязанные к карте( отдельно рисовать в редакторе )

Но генерится он от статических Drawables, а на базе коллизии уже можно сгенерить Navigation Meshes, а дальше, если необходимо можно и "ручками" подредактировать.
Была бы хорошая фича, если бы визуалу можно было бы популярно назначить всё параметры материала, например:
- сам материал: шейдер, текстуры
- физический материал: тип, флаги, можно ли генерировать какие-нибудь пропсы поверх
- звуковой материал или  параметры например, звук отскока)

Дальше это всё пусть редактор при компиляции игры сам разбивал что и какой системе необходимо, графики оставляем графический материал, для физики собираем объекты в большую кучу и делим на большие  физические объекты, назначая физические параметры и так далее.

В нашем движке есть взаимосвязь лишь через динамические RigidBodies и не которыми механизмами: RigidBodies, Constrains, их можно и прописать в файле сцены. Кстати эта схема очень удобно паралелится на два отельных потока.

И такую же схему мы применили к Audio миру.

Связь между миром графики и физики происходит через динамические объекты которые состоят из компонентов Drawable, RigidBody, или же через GameObject который также может состоять из Drawable, RigidBody, AudioBody как то так.

Правка: 11 фев. 2018 18:09

emptiness_rainУчастникwww11 фев. 201818:15#2
Aviator777
Основная дилемма в том что карта статична практически полностью, как и коллизии.
Казалось бы удобно брать данные от туда, а не рожать динамические объекты только для коллизии.
Но возможность их изменять тоже привлекает.

> Была бы хорошая фича, если бы визуалу можно было бы популярно назначить всё параметры материала
Согласен, к чему то такому и стремлюсь, только с учетом масштаба проекта.
Одно дело анрил энжин, другое утилитарный 2д движок)

/ Форум / Программирование игр / 2D графика и изометрия

2001—2018 © GameDev.ru — Разработка игр