Я пытаюсь создать взрыв, при котором при попадании в определенный объект объекты в ближайшем радиусе также уничтожаются. Например, в игре с разбиванием кирпичей мяч попадает в кирпич, а затем кирпич взрывается, но также взрывает 2 кирпича во всех направлениях. Как это можно сделать? Любая помощь приветствуется.
Набор спрайтов «Радиус взрыва»
Ответы (1)
Есть много способов сделать это, но способ spritekit заключается в создании ноды спрайта взрыва. Вы можете анимировать его по мере необходимости с помощью SKAction и использовать ту же логику контакта с физикой SpriteKit, что и с другими спрайтами.
Добавьте битовую маску категории физического контакта для узлов взрыва. Когда происходит событие, которое должно вызвать взрыв, вызовите метод, создающий узел взрыва в точке события. Установите положение узла взрыва в точку. Добавьте любые действия в ноду взрыва. Добавьте к сцене узел взрыва. Его действия будут выполняться. В методе делегата физического контакта didBeginContact: вы проверяете наличие контакта с любыми узлами категорий, которые должны реагировать на контакт с узлом взрыва. Если контакт установлен, основная вещь - сообщить узлу, с которым связались, удалитьFromeParent. Как только у вас это заработает, вы можете проявить фантазию.
Ваш узел взрыва, вероятно, должен получить физическое тело круга на основе CGPath.
Вероятно, вам следует поэкспериментировать с действиями, которые масштабируют его вверх и вниз. Вы можете усложнить процесс, добавив действия, обеспечивающие анимацию, звук и т. д., для уничтожения других узлов перед их удалением. Если они являются пользовательскими подклассами, самое время для протокола, который определяет имя метода, быть взорванным и удаленным. Затем пусть каждый класс реализует это. Звучит как работа, но сохраняет чистоту кода вашей игровой логики.
Этот общий процесс будет обычным, и вы с ним познакомитесь.