因此,我创建了一个SKSpriteNodes环,它基本上是使用针接头连接在一起的矩形。我想将这个戒指悬挂在SKShapeNode圈内。我已经使用SKPhysicsJointLimit将每个节点连接到SKShapeNode。
这一切都很好,如果我将maxLength设置为"右边"我会得到我正在寻找的效果。数字,我主观确定。
我已经存储了一个数组内的所有限制关节,因此我可以轻松访问,并且我已将它们添加到physicsWorld中。
所有这一切都正常并且正如预期的那样,尽管需要一些工作才能使代码正确。这些东西很挑剔!
现在,我真正想要做的是将maxLength设置为等于一个大数字,然后逐渐减少该数字,以便环从#34;松散地挂起"绷紧"拉扯"
我尝试了各种方法 - 但这些方法似乎都没有用。首先,我试过了:
SKAction *tighten = [SKAction customActionWithDuration:1 actionBlock:^(SKNode *node, CGFloat elapsedTime) {
CGFloat t = elapsedTime/duration;
CGFloat p = t*t;
CGFloat newLimit = fromLimit*(1-p) + toLimit*p;
for (int i = 0; i < _connectors.count; i++){
[[_connectors objectAtIndex:i] setMaxLength:newLimit];
}
}];
[_ring runAction:tighten];
但这根本没有做任何事情。
我终于意识到,在将关节的属性添加到physicsWorld之后,您似乎无法更改关节的属性。所以,我在场景的更新方法中尝试了类似的东西:
[scene.physicsWorld removeJoint:[_connectors objectAtIndex:i]];
[[_connectors objectAtIndex:i] setMaxLength:newLimit];
[scene.physicsWorld addJoint:[_connectors objectAtIndex:i]];
但是,这也没有用。它抛出了错误:
'Cant add joint <PKPhysicsJointRope: 0x114e84350>, already exists in a world'
尽管我已经明确删除了它。所以,我真的不知道从哪里开始。关于联合的文档和互联网上的现有材料非常薄。我想我接下来要做的就是删除所有关节并添加它们,但这将是一个巨大的痛苦。
任何想法都会非常有用!
答案 0 :(得分:1)
如OP所述,在变更适用之前,必须从物理世界中移除关节。以下对我有用。
for joint in joints
{
physicsWorld.removeJoint(joint)
joint.maxLength = yourNewValue
physicsWorld.addJoint(joint)
}