首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将关节添加到精灵工具包中的SKPhysicsWorld后,无法更改SKPhysicsJointLimit maxLength

将关节添加到精灵工具包中的SKPhysicsWorld后,无法更改SKPhysicsJointLimit maxLength
EN

Stack Overflow用户
提问于 2014-03-18 06:23:29
回答 1查看 396关注 0票数 4

所以,我已经创建了一个SKSpriteNodes环,它本质上是通过销接头连接在一起的矩形。我想把这个戒指挂在SKShapeNode的圆圈里。我已经使用SKPhysicsJointLimit将每个节点连接到SKShapeNode。

这一切都很好,如果我将maxLength设置为“正确的”数字,我会得到我想要的效果,这是我主观决定的。

我已经在数组中存储了所有的限制关节,所以我可以轻松地访问,并且我已经将它们添加到了physicsWorld中。

所有这一切都能正常工作,正如预期的那样,尽管需要做一些工作才能使代码正确。这些东西太挑剔了!

我尝试了各种方法--似乎都不起作用。首先,我尝试了:

代码语言:javascript
复制
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方法中尝试了类似这样的方法:

代码语言:javascript
复制
        [scene.physicsWorld removeJoint:[_connectors objectAtIndex:i]];
        [[_connectors objectAtIndex:i] setMaxLength:newLimit];
        [scene.physicsWorld addJoint:[_connectors objectAtIndex:i]];

但是,这也不起作用。它抛出错误:

代码语言:javascript
复制
'Cant add joint <PKPhysicsJointRope: 0x114e84350>, already exists in a world'

即使我已经把它移走了。所以,我真的不知道接下来该怎么做。互联网上关于接缝和现有材料的文档非常少。我想下一步我会尝试移除所有的关节并添加它们,但这将是一个巨大的痛苦。

任何想法都会非常有帮助!

EN

回答 1

Stack Overflow用户

发布于 2016-05-04 15:34:48

正如OP所指出的,在应用更改之前,似乎必须将关节从物理世界中移除。下面的方法对我很有效。

代码语言:javascript
复制
for joint in joints
{
    physicsWorld.removeJoint(joint)
    joint.maxLength = yourNewValue
    physicsWorld.addJoint(joint)
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22466698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档