所以,我已经创建了一个SKSpriteNodes环,它本质上是通过销接头连接在一起的矩形。我想把这个戒指挂在SKShapeNode的圆圈里。我已经使用SKPhysicsJointLimit将每个节点连接到SKShapeNode。
这一切都很好,如果我将maxLength设置为“正确的”数字,我会得到我想要的效果,这是我主观决定的。
我已经在数组中存储了所有的限制关节,所以我可以轻松地访问,并且我已经将它们添加到了physicsWorld中。
所有这一切都能正常工作,正如预期的那样,尽管需要做一些工作才能使代码正确。这些东西太挑剔了!
我尝试了各种方法--似乎都不起作用。首先,我尝试了:
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后,您似乎无法更改关节的属性。所以,我在场景的update方法中尝试了类似这样的方法:
[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'即使我已经把它移走了。所以,我真的不知道接下来该怎么做。互联网上关于接缝和现有材料的文档非常少。我想下一步我会尝试移除所有的关节并添加它们,但这将是一个巨大的痛苦。
任何想法都会非常有帮助!
发布于 2016-05-04 15:34:48
正如OP所指出的,在应用更改之前,似乎必须将关节从物理世界中移除。下面的方法对我很有效。
for joint in joints
{
physicsWorld.removeJoint(joint)
joint.maxLength = yourNewValue
physicsWorld.addJoint(joint)
}https://stackoverflow.com/questions/22466698
复制相似问题