В настоящее время у меня есть фигура тряпичной куклы, которая состоит из родительского узла (без прикрепленных физических тел) и множества дочерних узлов, каждый из которых состоит из круглого тела. Круги соединены друг с другом с помощью SKPhysicsJointPin
между каждым кругом, а именно:
У каждого SKPhysicsJointPin
есть shouldEnableLimits = true
, и сейчас я использую значения -0,05 и 0,05 для lowerAngleLimit
и upperAngleLimit
соответственно.
Это работает довольно хорошо и предотвращает чрезмерную деформацию формы, за исключением случаев, когда фигура переворачивается вверх ногами в целом, и в этом случае все суставы внезапно пытаются сжаться, например:
- См. также: видео
Суставы сокращаются очень быстро, когда фигура полностью перевернута. Когда он снова поворачивается назад, все суставы приходят в норму. Почему это происходит? Как сохранить правильный угол в суставах?
Редактировать 1:
Я только что попытался переписать проект на Objective-C на случай, если это было связано с какой-то странной ошибкой Swift; оказывается, эта проблема все еще проявляется в Objective-C, поэтому я удалил тег Swift.
Мое лучшее предположение на данный момент состоит в том, что угол суставов относительно мира неправильно рассчитывается SpriteKit, когда тела, к которым они прикреплены, поворачиваются более чем на 180° в любом направлении, и поэтому неправильные углы передаются в базовые соединения Box2D.
Я не был уверен, должен ли я постоянно обновлять нижний и верхний пределы угла, чтобы они соответствовали мировым углам их тел, но, похоже, я не должен этого делать, когда тело очень близко к тому, чтобы быть перевернутым. суставы перестают работать должным образом. Я все равно продолжу экспериментировать…
Редактировать 2:
Теперь я почти уверен, что проблема возникает из-за того, что SpriteKit (думаю, не без оснований) изменяет значение zRotation
, чтобы оно оставалось между -180° и 180°. Если, например, узел вращается по часовой стрелке и достигает -180°, SpriteKit автоматически возвращает его значение обратно к +180°. Я вполне уверен, что из-за этого перекручивания суставы ведут себя хаотично, мне просто нужно выяснить, как этому противодействовать…
Редактировать 3:
Я загрузил пример приложения (включая видео), демонстрирующий эту проблему, как изначально запросил Apple: Xcode Проект / Видео