SpriteKit:SKPhysicsJointPin 允许节点穿透节点链

SpriteKit: SKPhysicsJointPin allows node to penetrate chain of nodes

我有 10 个 SKSpriteNode 通过 SKPhysicsJointPin 连接。它们一起形成一条链(每个节点是一个链-link图像,每个节点都有一个physicsBody)。

还有一些球会四处弹跳并与链条相互作用。

期望的行为:球永远不会穿透链条。

实际行为:链条-link 关节留有太多余地,球会穿过 链条。需要明确的是,我不是在谈论隧道 - 球本身不会穿过节点。相反,链节点有点移到一边,球穿过开口。

创建链的代码-links(请假设所有变量都已定义并且每个节点的位置都是正确的。希望你能看到这里发生了什么):

let chains = mainData.getLevelChains()
let bodyA = SKSpriteNode(imageNamed: "chainLink.png")
                    
bodyA.size = CGSize(width: chainLinkWidth, height: chainLinkHeight)
                    
bodyA.position = CGPoint(x:chains[i].leftAnchorPosition.x + CGFloat(halfChainLinkWidth) + (chainWidth * (0.1 * CGFloat(j))), y: chains[i].leftAnchorPosition.y)
                    
bodyA.name = "body"
                    
bodyA.physicsBody = SKPhysicsBody(texture: bodyA.texture!, size: CGSize(width: chainLinkWidth, height: chainLinkHeight))
                    
bodyA.physicsBody?.categoryBitMask = CollisionTypes.chain.rawValue
bodyA.physicsBody?.collisionBitMask = CollisionTypes.ball.rawValue
                    
addChild(bodyA)

let joint = SKPhysicsJointPin.joint(withBodyA: previousChainLink.physicsBody!, bodyB: bodyA.physicsBody!, anchor: CGPoint(x: Double(previousChainLink.position.x)+halfChainLinkWidth, y: Double(previousChainLink.position.y)))
                    
scene?.physicsWorld.add(joint)

问题:我该怎么做才能确保链条保持其结构完整性,使球永远不会穿过链条?

最后,我通过将链节的 mass 设置为略大于球的值来解决问题。

ball.physicsBody?.mass = 5.0
chainLink.physicsBody?.mass = 6.0