Приветствую тебя, меня зовут - "trenerAnton".
Это моя первая статья по SCRATCH, в которой я расскажу о своём проекте --- "Система загрузки уровней в SCRATCH".
На основе данной системы, ты сможешь легко создать свою собственную игру с множеством уровней и сконцентрироваться на наполнении своего проекта интересными механиками, звуками, анимацией, головоломками и сюжетом.
В этой статье:
1. Опишу проблему, которую решает данный проект, при создании игр на SCRATCH;
2. Кратко изложу принцип работы системы загрузки уровней (СЗУ);
3. Представлю фрагменты кода, с поясняющими заметками;
4. Дам рекомендации по работе с системой.
Глава 1 - SCRATCH и его сцена
На сегодняшний день существуют игровые движки (UE5, UNITY и др.) позволяющие создавать уникальные миры с множеством уровней, а порой и совсем с "бесшовными локациями", которые способны поражать игрока своим масштабом и детализацией.
В них существует удобная камера, позволяющая передавать глубину локаций, следовать за главным героем, ставить кинематографичные сцены и ракурсы.
пример*: God of war (UE4)
***
Но в SCRATCH камеры как таковой нет. Мы ограничены лишь одним экраном главной сцены.
По этой причине, все манипуляции над игровым миром, приходится осуществлять с помощью набора блоков - скрывать\показывать спрайты**, перемещать** их в пространстве сцены**, менять фон** и т. д.
Другими словами: все наши предметы, объекты на сцене, персонажи, враги, ящики и т. д. будут постоянно находиться на сцене игры (ХАОС).
И только мы определяем, что должен видеть игрок в данный момент, а что должно быть скрыто от его глаз. Тем самым, разработка среднего проекта превращается в огромную головную боль, с которой сталкивался каждый начинающий SCRATCHER.
А представьте себе игру в SCRATCH ( на примере ROBLOX DOORS ), в которой нам необходимо создать более 100 комнат (уровней), добавить множество спрайтов, врагов, предметов...
И желательно (must have*), чтобы разработчик мог легко расширять свою игру, добавляя новые уровни и контент (предметы, вещи, ящики, патроны, ключи и т. д. ).
Об этом в следующей главе.
Глава 2 - Система загрузки уровней (СЗУ)
Пока мы не перешли к разбору системы загрузки уровней, хочется немного сказать о хорошей практике при программировании, а именно о "модульном подходе".
Принцип модульности очень прост:
Мы разделяем программу на маленькие кусочки, которые взаимодействуют друг с другом. Благодаря этому мы можем гибко и безопасно расширять функционал нашей программы, избегая огромного количества багов и проблем, и особенно ОГРОМНЫХ кусков кода, которые нашему мозгу порой очень сложно воспринимать.
"СЗУ" была разработана на основе модулей (Дверь, СЗУ, Экран загрузки, Шкаф), каждый модуль(спрайт) общается с другими с помощью сообщений и глобальных переменных.
Концептуально идею системы загрузки уровней можно представить так:
1. Игрок взаимодействует со спрайтом - например входит в дверь;
2. Игра должна показать игроку экран загрузки новой локации, уровня (комнаты);
3. Скрыть всё, что не относится к новой локации;
4. Показать всё, что должен видеть игрок на новом уровне (комнате).
Визуально это выглядит так:
Вышеописанной информации достаточно для понимая работы СЗУ, но для ценителей блок-схем , весь цикл работы системы представлен ниже:



Глава 3 - Код проекта
Игрок
Система загрузки уровней
Глобальные переменные - спрайт в котором хранятся все глобальные переменные
Экран загрузки
Дверь - определение блоков
Программа Двери

Шкаф
Глава 4 - Как добавлять уровни и объекты?
1. Чтобы добавить новый уровень (комнату) - копируем дверь--меняем её костюм--меняем переменную (моя_Комната) - готово!

Всего пару кликов мыши и у нас готова новая комната (уровень). Двери можно изменять, добавлять к ним замки, ключи, сделать из них порталы, люки, окна - всё что угодно.
По сути двери - это точки перехода на новый уровень.
2. Добавление предметов -- на примере Шкафа
- Добавим новый шкаф в комнату 2 -- копируем шкаф -- меняем переменную (моя_Комната) - готово!
Всё очень просто! Каждый объект можно вручную переставить в необходимое место, поправив его координаты по (Х,У) в коде.
ЗАКЛЮЧЕНИЕ
На этом всё, очень надеюсь, что статья была интересной и, самое главное, познавательной для тебя!
С уважением, trenerAnton.
**Ссылка на проект: Система загрузки уровней в SCRATCH



