SpriteKit и столкновение частиц

#sprite-kit

#набор спрайтов

Вопрос:

У меня есть излучатель частиц, и я хотел бы обнаружить его, когда частицы сталкиваются с некоторыми физическими телами. Есть ли собственный способ сделать это в API SpriteKit или мне нужно «обмануть»?

Ответ №1:

Отдельные частицы не могут сталкиваться. Ни с помощью физики, ни каким-либо другим способом. Вы даже не получаете никакой информации об отдельной частице — вы не можете получить доступ к ее положению, вращению, скорости .. ничего.

Если вы хотите «обмануть», вам придется эмулировать излучатель частиц с помощью спрайтов и анимировать спрайты с помощью действий или вручную. Однако имейте в виду, что это намного менее эффективно, чем излучатель частиц.

Кроме того, если мы говорим о «частицах», что часто означает их десятки или даже сотни на экране, объем физической обработки и обнаружения столкновений быстро становится непомерно дорогим, если вы моделируете их с помощью спрайтов с прикрепленными физическими телами. Проведите тест производительности, прежде чем идти по этому пути.

Комментарии:

1. Хорошо, большое спасибо за этот подробный ответ! Разве нет никакой другой альтернативы ? Допустим, я хочу имитировать взрыв, что я использую для этого частицы и что я хотел бы причинить вред любому персонажу, которого это коснулось, есть ли другой способ сделать это (даже если я использую что-то совершенно отличное от излучателя частиц)

2. Как я уже сказал, если вы создадите спрайты взрывающихся частиц, вы сможете сталкивать их, но вы не сможете анимировать их так же аккуратно, как при использовании системы, основанной на правилах, такой как particle emitters.

Ответ №2:

Частицы не имеют физических тел, поэтому они не сталкиваются с физическим движком Sprite Kit

Ответ №3:

Вы можете установить физическое тело излучателя частиц так же, как вы устанавливаете его для любого узла спрайта. Затем вы можете установить свойство битовой маски категории и битовую маску теста контакта. Метод didBeganContact может впоследствии обнаружить столкновение.

Комментарии:

1. Спасибо! Но вызывает ли он этот метод для каждой отдельной частицы? Считаете ли вы , что это работает , даже когда вы устанавливаете целевой узел для своего излучателя частиц ?

2. К сожалению, это не сработает, потому что частицы не имеют физических тел.

Ответ №4:

Дидбеганский контакт вызывается всякий раз , когда два тела соприкасаются друг с другом . Вот ссылка на Apple reference для того, как работает этот метод:

Щелчок [here](https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKPhysicsContactDelegate_Ref/Reference/Reference.html#//apple_ref/occ/intfm/SKPhysicsContactDelegate/didBeginContact:» Библиотека разработчиков Apple iOS»)!

Комментарии:

1. Спасибо, я попробую это, чтобы посмотреть, работает ли это, потому что, хотя частицы и являются узлами, это особые узлы, которые немного отличаются. Кстати, вы, кажется, новичок в StackOverflow, поэтому ее совет: если вы хотите добавить дополнительную информацию, вы можете сделать это, отредактировав свой первоначальный ответ. Вы также можете ответить прямо в комментариях, если кто-то задал вам вопрос, как я только что сделал. (как правило, вы никогда не пишете два ответа)

2. Спасибо, я этого не знал. 🙂