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
我有 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