SpriteKit中可弯曲的手臂旋转-在点旋转

时间:2018-07-11 22:14:42

标签: ios swift sprite-kit rotation

我正在尝试使用SpriteKit模拟可弯曲的手臂。我有上臂SKShapeNode和下臂SKShapeNode

我将如何旋转下臂,使其在肘部旋转而不是自身旋转?

这是我的直臂,上臂为棕褐色,下臂为青色。

enter image description here

这是下臂旋转-90度后的样子

enter image description here

我如何模拟下臂在肘部连接到上臂?我尝试了多个SKConstraint,但找不到适合我的情况。

1 个答案:

答案 0 :(得分:2)

您要使用SKPhysicsJointPin

以下是可用的Sprite-Kit关节:https://developer.apple.com/reference/spritekit/skphysicsjoint

enter image description here

您可以使用物理世界添加或删除关节。创建关节时,始终在场景的坐标系中指定连接关节的点。这可能需要您在创建关节之前先从节点坐标转换为场景坐标。

要在游戏中使用物理关节,请执行以下步骤:

  1. 创建两个物理物体。
  2. 将物理物体附加到场景中的一对SKNode对象上。
  3. 使用列在其中的子类之一创建关节对象 上图。如有必要,配置关节对象的属性 定义关节的操作方式。
  4. 检索场景的SKPhysicsWorld对象。
  5. 调用物理学界的add(_ :)方法。

以下代码将两个节点upperArmlowerArm固定在一起,并使用一个通过“ SKPhysicsJointPin”接头实现的“肘部”。我们通过取upperArmlowerArm重叠的区域的中间位置来计算“肘部”位置-这非常粗糙,应该加以改进。

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销钉允许的最大角度   关节,以弧度为单位。