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

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

Мои сцены node tree:

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

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

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

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

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

Я хочу установить опорную точку в позиции "node". После переезда мира node, расчет anchorpoint не работает больше.

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

Greetz - Nekro

Update:

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

- (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);
}

Ответ 1

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

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

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

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

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

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

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