Сейчас я создаю движение ногой, используя два физических тела; тело и нога. Я использую штифтовое соединение, чтобы соединить два тела, применяю ограничения угла, чтобы ограничить движение ноги, и прикладываю импульс крутящего момента, чтобы ударить ногу. Все работает хорошо.
Тем не менее, мой персонаж также имеет возможность прыгать (просто применяя восходящий импульс к телу), и это, кажется, вызывает проблемы с пределами моего штифтового сустава. Ограничения начинают сбиваться, когда персонаж перевернут, особенно когда zRotation персонажа перемещается между PI и -PI, то есть в любую сторону от прямого переворота.
Это кажется странным, потому что пределы суставов хорошо работают, когда вы стоите в правильном положении. Кто-нибудь когда-нибудь видел подобную проблему при использовании объекта SKPhysicsJointPin
с установленными ограничениями?
Для полноты картины физические тела представляют собой простые bodyWithRectangleOfSize:
тела, узел ноги является дочерним элементом узла тела (поэтому вращается вместе с ним), и вот как я настраиваю шарнирное соединение:
CGPoint topOfLegAnchor = CGPointMake(0.0, [leg size].height / 2.0);
topOfLegAnchor = [[self scene] convertPoint:topOfLegAnchor fromNode:leg];
SKPhysicsJointPin *pinnedJoint = [SKPhysicsJointPin jointWithBodyA:[body physicsBody]
bodyB:[leg physicsBody]
anchor:topOfLegAnchor];
[pinnedJoint setShouldEnableLimits:YES];
[pinnedJoint setLowerAngleLimit:-M_PI_2];
[pinnedJoint setUpperAngleLimit:0.0];