gpt4 book ai didi

sprite-kit - 将关节​​添加到 Sprite Kit 中的 SKPhysicsWorld 后,无法更改 SKPhysicsJointLimit maxLength

转载 作者:行者123 更新时间:2023-12-04 01:38:56 24 4
gpt4 key购买 nike

因此,我创建了一个 SKSpriteNodes 环,它们本质上是使用销接头连接在一起的矩形。我想将这个环卡在 SKShapeNode 圆内。我已经使用 SKPhysicsJointLimit 将每个节点连接到 SKShapeNode。

这一切都很好,如果我将 maxLength 设置为我主观确定的“正确”数字,我就会得到我正在寻找的效果。

我已经将所有的极限关节存储在一个数组中,所以我可以很容易地访问,并且我已经将它们添加到了physicsWorld。

所有这些都按预期正常工作,尽管需要一些工作才能使代码正确。这些东西很挑剔!

现在,我真正想做的是将 maxLength 设置为某个较大的数字,然后随着时间的推移逐渐减少该数字,以便戒指从“松散悬挂”变为“拉紧”

我尝试了多种方法——似乎没有一种方法有效。首先,我试过:

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];

但这根本没有做任何事情。

我终于意识到,在将关节添加到物理世界后,您似乎无法更改关节的属性。所以,我在场景的更新方法中尝试了这样的事情:
        [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'

即使我已经清楚地删除了它。所以,我真的不知道从这里去哪里。互联网上有关关节的文档和现有 Material 非常少。我想接下来我会尝试移除所有关节并添加它们,但这将是一个巨大的痛苦。

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

最佳答案

正如 OP 所指出的,在应用更改之前,关节似乎必须从物理世界中移除。以下为我工作。

for joint in joints
{
physicsWorld.removeJoint(joint)
joint.maxLength = yourNewValue
physicsWorld.addJoint(joint)
}

关于sprite-kit - 将关节​​添加到 Sprite Kit 中的 SKPhysicsWorld 后,无法更改 SKPhysicsJointLimit maxLength,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22466698/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com