Думаю, многие знают о метроидваниях не по наслышке. Одной из характерных черт (но необязательных) является игровой мир, поделённый на комнаты. Вот пара классических примеров:
Super Metroid
Metroid Fusion
Metroid Zero Mission
AM2R
Samus Returns
И немного оффтопом карта из Metroid Prime:
Castlevania Circle of the moon
Castlevania Harmony Of Dissonance
Castlevania Aria Of Sorrow
Castlevania Symphony of the night
Hollow Knight
Ori and the Blind Forest
Environmental Station Alpha
Valdis Story
Sundered
Song of Deep
Insanely Twisted Shadow Planet
Axiom Verge
Hero Core
Как видно из примеров, делают по-разному. Есть карты совсем упрощённые — геометрически простые комнаты. Есть карты, показывающие рельеф. Геометрические комнаты могут быть упрощены до комбинации квадратов или же иметь косые углы. Я думаю, что это детали и что если каждой комнате сопоставить картинку то можно рисовать вместо прямоугольников эту картинку.
И комнаты могут иметь чисто прямоугольные формы. Т.к. я ещё новичок в такого рода делах, то меня это абсолютно устраивает, хотя я почти уверен, что мой метод можно легко расширить на непрямоугольные комнаты.
Что такое комната? В Game Maker Studio это ассет, сцена, в которой разработчик расставляет объекты. Она имеет определённые размеры и ещё ряд настроек несущественных в данном посте. Можно добавлять объекты в комнату в рантайме и даже собирать уровни или загружать если они были созданы заранее в другом редакторе. Но это парсинг данных и всё такое. Поэтому вариант догрузки нужной комнаты встык — это не мой вариант. Можно пофантазировать как это могло бы быть и выяснилось бы что там свои геморрои — например нужно хранить связи входов и выходов, их нужно помечать прям внутри комнат, что влечёт ещё один менеджмент и обнаруживает очередной камень преткновения в реализации.
Так что в данном посте я рассматриваю набор заранее созданных комнат и переходов между ними.
читать дальше >>