Занятие 7.2 Сборка сцены Луна
Цель: разработать сцену образовательного проекта "Космическая миссия" и подготовить ее для применения логики, инициализировать переменные.
Задачи:
- Закрепить навык расстановки объектов на локации
- Закрепить навык тестирования своих проектов
- Закрепить навыки работы с UI/UX - дизайном
- Закрепить навыки работы с логическими блоками ботов в Blockly
- Закрепить навыки работы с вкладками логики в Blockly
- Закрепить навыки работы с техническим заданием
- Закрепить навыки работы с переменными и их инициализацией
Техническое задание:
Необходимо создать приложение для Varwin, которое будет воспроизводить лунную миссию, состоящую из трех шагов:
- Подвести ровер к маяку для получения координат (избегайте столкновений!).
- Вычислить оптимальный угол радара для отправки сообщения.
- Установить контакт с инопланетной цивилизацией, повернув радар на оптимальный угол.
Специальные требования:
- Препятствия должны генерироваться случайным образом при каждом запуске приложения.
- Должен быть реализован интерфейс для управления ровером.
- Требуется реализовать шкалу здоровья для ровера, которая будет уменьшаться при столкновении с препятствиями. При обнулении шкалы здоровья миссия должна начинаться сначала.
- Оптимальный угол должен рассчитываться автоматически из случайно сгенерированных координат и быть равен среднему арифметическому координат.
- UI должен информировать игрока об основных шагах выполнения миссии и о сгенерированных и вычисленных данных.
- Радар должен поворачиваться на вычисленный оптимальный угол, который задается случайным образом при каждом запуске приложения.
Подробно и поэтапно разберите с обучающимися техническое задание. Это финальный кейс, он довольно сложный и чтобы его реализовать нужно максимально внимательно подойти к занятиям. Проект содержит много разной логики и вкладок с логикой. Обязательно структурируйте свою логику в разные функциональные вкладки.
Сборка сцены Космической миссии
В качестве основной сцены в нашем случае выбрана локация “Луна.
Разместим на ней основные объекты:
- Ровер, который будет двигаться к маяку.
- С помощью Проводов зададим границы перемещения ровером в целях создания добного UX-дизайна. Для удобства создадим для проводов Иерархию.
- Радар, который будет поворачиваться на Оптимальный угол для установления контакта с инопланетной цивилизацией.
- И Маяк, к которому необходимо будет подвести ровер для получения координат.
Самостоятельная работа: разместите на локации дополнительные пропсы, которые будут служить ограничителями игровой зоны, при этом они должны выглядеть естественно. В нашем случае, это лунная станция и солнечная батарея. Но вы можете найти больше объектов из этой тематики в пакете “Астрономия”.
Совет: плохой пример UX-дизайна для ограничения игрового пространства - это использование невидимых стен, старайтесь избегать такого метода ограничения перемещения игрока, лучше использовать в качестве препятствий объекты, вписывающиеся в тематику локации.
Далее нам необходимо разместить на сцене препятствия, которые должен будет объехать Ровер, управляемый игроком, чтобы добраться до маяка для генерации Координат.
В качестве препятствий мы использовали бочки и контейнеры, вы можете разместить препятствия по своему вкусу и сформировать для них Иерархию.
Наконец, разместим на сцене UI, которые будут отвечать за постановку задания и окончание миссии (UI “Конец”) и информацию от маяка (UI “Координаты”):
На самом деле нам еще понадобятся дополнительные объекты на этой сцене, которые будут отвечать за интерфейс взаимодействия с ровером и маяком, но мы дополним этими UI сцену в момент, когда дойдем до сборки логики этих этапов выполнения задания, чтобы сформировать целостную картину сборки данного кейса.
Сборка логики Космической миссии.
Создадим вкладки в редакторе логики для реализации каждой из основных механик, согласно ТЗ:
Из ТЗ: Препятствия должны генерироваться случайным образом при каждом запуске приложения.
Во первых создадим вкладку Начало миссии (1), в которой опишем то, что происходит в Момент инициализации и условия старта. Одним из интересных условий является случайная генерация препятствий при начале миссии в Момент инициализации, здесь мы впервые столкнемся с циклами, поэтому сделаем на этом отдельный акцент.
Из ТЗ: Подвести ровер к маяку для получения координат (избегайте столкновений!).
Должен быть реализован интерфейс для управления ровером.
Для этих пунктов создадим вкладку Управление ровером (2), где соберем основные события и функции для интерфейса управления.
Из ТЗ: Подвести ровер к маяку для получения координат (избегайте столкновений!).
Требуется реализовать шкалу здоровья для ровера, которая будет уменьшаться при столкновении с препятствиями. При обнулении шкалы здоровья миссия должна начинаться сначала.
Все, что описано в данных пунктах относится к столкновениям ровера с препятствиями или целевым объектом (Маяк), выделим для этой логики отдельную вкладку Логика столкновений (3).
Из ТЗ: Вычислить оптимальный угол радара для отправки сообщения.
Установить контакт с инопланетной цивилизацией, повернув радар на оптимальный угол.
Оптимальный угол должен рассчитываться автоматически из случайно сгенерированных координат и быть равен среднему арифметическому координат.
UI должен информировать игрока об основных шагах выполнения миссии и о сгенерированных и вычисленных данных.
Радар должен поворачиваться на вычисленный оптимальный угол, который задается случайным образом при каждом запуске приложения.
Все, что описано в данных пунктах так или иначе сводится к финалу миссии - это вычисление Оптимального угла, интерфейс управления Маяком и Радаром, для вычисления Оптимального угла и поворота Радара, а также UI для информирования игрока.
Итак, начнем собирать логику в данном порядке - по вкладкам.
Вкладка Начало миссии.
Для начала объявим переменные, это важно сделать в Момент инициализации, поэтому здесь мы немного зайдем на территорию механик, которые будут описаны в последующих вкладках.
Примечание: в процессе разработки сложного приложения часто приходится возвращаться к началу, чтобы объявить новые переменные, которые требуются для реализации логики и часто сложно превентивно понять, какие именно переменные нам понадобятся. Но поскольку мы разбираем уже собранное приложение, то для наглядности мы упростим этот момент. Однако в будущем не забывайте, что часто сложно спрогнозировать конечную архитектуру вашего приложения.
- Переменная Оптимальный угол - это переменная будет вычисляться в процессе выполнения логики приложения, пока зададим ей значение по умолчанию “0”.
- Переменная Здоровье ровера - эта переменная отвечает за максимальное количество столкновений Ровера с препятствиями, до его разрушения и перезапуска приложения.
- Переменная Текст с координатами - это переменная, которая будет отвечать за отображение случайно сгенерированных координат на UI “Координаты”.
- Список Координат - с помощью этой переменной мы создаем список с одинаковыми элементами, чтобы в будущем его перезаполнить случайно сгенерированными числами. Очень важно на старте определиться с длиной списка, независимо от элементов, которые будут его наполнять, зато в будущем мы сможем быстро поменять количество этих элементов одним кликом для оптимизации нашего приложения.
- Список Препятствий - здесь мы формируем список Препятствий, которые ранее расставили на локации (в нашем случае это бочки и контейнеры, но у Вас может быть другой список этих объектов).
На пункте 5 остановимся подробнее.
Как вы видите, мы можем формировать списки не только из абстрактных чисел или текста, но и из объектов, которые находятся на сцене.
Для того, чтобы это сделать выберите категорию объектов “Любой”, а далее назначьте необходимый объект из выпадающего списка:
Этот список нам понадобится для создания случайной генерации препятствий в начале Космической миссии. С этого и начнём следующее занятие.
Контрольные вопросы (выборочно можно использовать на этапе рефлексии, для проверки усвоения знаний, полученных на занятии):
- Из каких объектов можно создавать списки в Varwin?
- Что делает блок «в момент инициализации»?
- Что нужно сделать чтобы сформировать список из объектов?