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