24.02.2023
статья
Система загрузки уровней в SCRATCH

Приветствую тебя, меня зовут - "trenerAnton".


Это моя первая статья по SCRATCH, в которой я расскажу о своём проекте --- "Система загрузки уровней в SCRATCH".
На основе данной системы, ты сможешь легко создать свою собственную игру с множеством уровней и сконцентрироваться на наполнении своего проекта интересными механиками, звуками, анимацией, головоломками и сюжетом.


В этой статье:
1. Опишу проблему, которую решает данный проект, при создании игр на SCRATCH;
2. Кратко изложу принцип работы системы загрузки уровней (СЗУ);
3. Представлю фрагменты кода, с поясняющими заметками;
4. Дам рекомендации по работе с системой.

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

  1. Игрок открывает дверь;
  2. Дверь добавляет свой номер комнаты в список комнат (если вы ещё не знакомы со списками, то не беда - принцип работы всё равно будет понятен);
  3. Дверь посылает сообщение "Открыли дверь";
    4. Система загрузки уровней (СЗУ) - получая это сообщение, берёт из списка комнат последний элемент (то есть последнюю добавленную дверь) и задаёт глобальную переменную == номеру двери;
  4. СЗУ посылает сообщение "Загрузит комнату" и все спрайты в нашей игре получают это сообщение. Если их комната (комната в которой они должны быть)   ==    Глобальному номеру комнаты, то спрайт показывается, иначе прячется.

Вышеописанной информации достаточно для понимая работы СЗУ, но для ценителей блок-схем , весь цикл работы системы представлен ниже:image
image
image
image
Глава 3 - Код проекта                                                         
 Игрокimage.png


Система загрузки уровнейimage.png


Глобальные переменные - спрайт в котором хранятся все глобальные переменныеimage.png


Экран загрузкиimage.png


Дверь - определение блоковimage.png
Программа Двери
image.png


Шкафimage.png
Глава 4 - Как добавлять уровни и объекты?                                     
1. Чтобы добавить новый уровень (комнату) - копируем дверь--меняем её костюм--меняем переменную  (моя_Комната)  - готово!
scratch_door.gif
Всего пару кликов мыши и у нас готова новая комната (уровень). Двери можно изменять, добавлять к ним замки, ключи, сделать из них порталы, люки, окна - всё что угодно.
По сути двери - это точки перехода на новый уровень.


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

Система загрузки уровней в SCRATCHСистема загрузки уровней в SCRATCHСистема загрузки уровней в SCRATCHСистема загрузки уровней в SCRATCH
Комментарии (12)
Пост годный, мемчики в конце тоже. Определённо лайк
жесткая презентация по доте!!!!👼
#Самый_лучший_длинный_топовый_полезный_пост
Ответ на этот комментарий
9 апреля, 2023 в 20:01
|
Матвей Д. 001689
+rep)
reeeep
Ответ на этот комментарий
25 февраля, 2023 в 22:14
|
Андрей М. Anend
Пост годный, мемчики в конце тоже. Определённо лайк
😆😆😆😆😆^⁠_⁠^(⁠◔⁠‿⁠◔⁠)
Вот и причина, почему в Scratch сложно писать большие проекты. Переходите на Pygame)