SpriteKit Физические суставы повреждены для движущейся сцены

Я создал сцену SpriteKit с физическими bodys. Это работает очень хорошо. Я также прокручиваю сцену, используя лучшую практику Apple с «узлом камеры».

Дерево узлов моей сцены выглядит так:

Scene |- World |- Camera node |- Game nodes with physics bodys 

Моя проблема заключается в том, что во время игры я создаю новые узлы с новыми суставами (в основном фиксированными суставами) динамически. В этот момент мировой узел имеет другое положение, чем в начале (например: at start (0,0), во время игры (1000 500) ..) Теперь опорная точка для фиксированных суставов находится не на позицию, которую я хочу, это где-то на сцене.

Я предполагаю, что система координат сцены отличается от системы координат физического движка.

Для точки привязки я использую следующее преобразование:

 [world.scene convertPoint:node.position fromNode:node.parent]; 

Я хочу установить опорную точку в позиции «узла». После перемещения мирового узла, расчет anchorpoint не работает больше.

Спасибо за вашу помощь!

Greetz – Nekro

Обновить:

Код в центре сцены на проигрывателе

 - (void)centerOnNode:(SKNode*)node { CGPoint cameraPositionInScene = [node.scene convertPoint:node.position fromNode:node.parent]; node.parent.position = CGPointMake(node.parent.position.x - cameraPositionInScene.x, node.parent.position.y - cameraPositionInScene.y); } 

Существует два требования к использованию соединений с физикой SpriteKit:

  1. Определите суставы в пространстве мира (сцены).
  2. Не двигайте мир.

Из вашего вопроса и комментариев это звучит так, будто у вас есть право № 1: когда суставы между узлами, которые не являются прямыми детьми сцены, вам нужно преобразовать координаты в пространство сцены, прежде чем использовать их для определения сустава.

Однако физика SpriteKit не справляется с этим, когда вы пытаетесь переместить корневую систему координат. Таким образом, внедрение «камеры» путем перемещения мира вызывает проблемы для суставов. Вместо:

  • Если вы можете позволить себе ориентироваться только на iOS 9.0 / OS X 10.11 / tvOS 9.0 и выше, используйте SKCameraNode вместо перемещения мира. Это тоже легче!

    (Если вам интересно, можете ли вы поддерживать только iOS 9, проверьте статистику скорости принятия и сравните с графиком разработки … если вы не будете отправлять какое-то время, iOS 9 может быть «-1» ОС к моменту, когда вы закончите. Помните, что существует высокая корреляция между восторженными клиентами и ранними усыновителями.)

  • Если вы все еще поддерживаете iOS 8 / OS X 10.10, попробуйте добавить дополнительный слой к вашей сцене: подделать камеру, переместив узел, являющийся дочерним элементом вашей сцены, и родитель всего содержимого вашей игры.

  • iOS Sprite Kit Почему я не могу повторить colorizeWithColor с использованием белого цвета?
  • Рисование пунктирной линии в наборе Sprite с использованием SKShapeNode и CGPath
  • Не могу понять, почему узел + физическое тело не реагирует на гравитацию или импульсы
  • SKLabelNode исчезнет, ​​но по-прежнему доступен для клика
  • Добавление инициализаторов удобства в Swift Subclass
  • Нечеткое прокручивание SCSpriteNode?
  • Как добавить UIView в ** spriteKit **?
  • SpriteKit, XCode 8, Swift 3 MGGetBoolAnswer недоступен в симуляторе
  • Как сделать камеру следующей SKNode в комплекте Sprite?
  • Получение угла поворота SKSpriteNode
  • iAd с Swift в SpriteKit
  • Давайте будем гением компьютера.