У меня проблема с тем, как SpriteKit разрешает столкновения между двумя телами. Я разрабатываю игру, в которой узлы спрайтов динамически добавляются на экран в случайных положениях. У всех этих спрайтов есть физические тела, которые сталкиваются друг с другом. На более высоких уровнях игры есть много этих спрайтов, а иногда и новый спрайт, который он добавляет поверх другого (что является правильным поведением до тех пор, пока столкновение разрешается плавно). В Cocos2d + Box2d в этой ситуации столкновение разрешается плавно. Оба спрайта осторожно перемещаются в противоположных направлениях, пока они больше не сталкиваются. Это выглядит очень хорошо, даже если есть много таких столкновений, анимация движения плавная и FTP высок. Однако, на SpireKit все выглядит несколько иначе. Когда новое тело добавляется поверх другого, с точки зрения пользователя он не перемещается для разрешения столкновения - вместо этого он «телепортируется». Нет никакого плавного движения шпилей, они просто переориентируются таким образом, что они больше не будут сталкиваться. Это выглядит неплохо для игрока, даже игра работает 60 кадров в секунду. Я прочитал в документации Apple:SpriteKit, разрешать конфликты плавно, как в Cocos2d
Столкновение используется для предотвращения взаимного проникновения двух объектов. Когда один орган ударяет по другому телу, Sprite Kit автоматически вычисляет результаты столкновения и применяет импульс к телам при столкновении.
Но похоже, что это не так, как описано. Apple говорит мне, что при столкновении происходит импульс, применяемый к телам, которые сталкиваются друг с другом, но в реальной жизни похоже, что тела «телепортированы» (мгновенно перемещаются в то место, которое больше не вызывает столкновения). Может быть, сила, приложенная к телам, настолько сильна, что вы не можете видеть движение объектов. Интересно, есть ли способ улучшить такое поведение в SpriteKit, поэтому он больше похож на Cocos2d + Box2d. В конце концов, SpriteKit от Apple основан на Box2d.
Пожалуйста, дайте мне знать, если вы выясните какие-либо обновления по этому вопросу. Он не изменился, и время от времени у моей игры будет немного «дрожания», и мой игрок будет телепортироваться по той же причине. – lespommes
Я не нашел никакого решения, но для обходного пути я изменил логику добавления спрайтов к сцене, поэтому они не будут перекрываться. Ничего особенного, но работает в моем случае. – Darrarski