我正在尝试使用SpriteKit模拟可弯曲的手臂。我有上臂SKShapeNode
和下臂SKShapeNode
。
我将如何旋转下臂,使其在肘部旋转而不是自身旋转?
这是我的直臂,上臂为棕褐色,下臂为青色。
这是下臂旋转-90度后的样子
我如何模拟下臂在肘部连接到上臂?我尝试了多个SKConstraint
,但找不到适合我的情况。
答案 0 :(得分:2)
您要使用SKPhysicsJointPin
以下是可用的Sprite-Kit关节:https://developer.apple.com/reference/spritekit/skphysicsjoint
您可以使用物理世界添加或删除关节。创建关节时,始终在场景的坐标系中指定连接关节的点。这可能需要您在创建关节之前先从节点坐标转换为场景坐标。
要在游戏中使用物理关节,请执行以下步骤:
以下代码将两个节点upperArm
和lowerArm
固定在一起,并使用一个通过“ SKPhysicsJointPin
”接头实现的“肘部”。我们通过取upperArm
和lowerArm
重叠的区域的中间位置来计算“肘部”位置-这非常粗糙,应该加以改进。
let elbowArea = lowerArm.frame.intersection(upperArm.frame)
let elbowPosition = CGPoint(x:elbowArea.midX,y:elbowArea.midY)
let elbowJoint = SKPhysicsJointPin.joint(withBodyA: upperArm.physicsBody!,
bodyB: lowerArm.physicsBody!,
anchor: elbowPosition)
scene.physicsWorld.add(elbowJoint)
还应该通过接头的属性设置销接头(弯头)的旋转极限:
var shouldEnableLimits: Bool
一个布尔值,指示是否 销接头的旋转被限制在特定的值范围内。
var lowerAngleLimit: CGFloat
销钉所允许的最小角度 关节,以弧度为单位。
var upperAngleLimit: CGFloat
销钉允许的最大角度 关节,以弧度为单位。