У меня есть узел спрайта, соединенный с другим узлом спрайта с помощью штифтового соединения, закрепленного как такового. Я пытаюсь смоделировать это, где зеленый спрайт перемещается пальцем:
https://i.stack.imgur.com/limMh.gif
Это то, что у меня есть, но оно вращается неправильно:
body.name = "body"
body.size = CGSize(width: 10, height: 70)
body.physicsBody = SKPhysicsBody(rectangleOf: body.size)
body.physicsBody?.isDynamic = false
self.addChild(body)
leftArm.name = "leftArm"
leftArm.size = CGSize(width: 50, height: 50)
leftArm.position = CGPoint(x: -24, y: 0)
leftArm.physicsBody = SKPhysicsBody(rectangleOf: leftArm.size)
leftArm.physicsBody?.isDynamic = true
self.addChild(leftArm)
let leftArmBodyJoint = SKPhysicsJointPin.joint(withBodyA: leftArm.physicsBody!,
bodyB: body.physicsBody!,
anchor: CGPoint(x: self.body.frame.midX, y: self.body.frame.midY))
physicsWorld.add(leftArmBodyJoint)
let location = touches.first?.location(in: self)
let nodeTouched = atPoint(location!)
if nodeTouched.name == "leftArm" {
print("Began touch on left arm")
touchedLeftArm = nodeTouched
isFingerOnLeftArm = true
self.startPoint = touches.first!.location(in: self)
}
if isFingerOnLeftArm{
let newPoint = touches.first!.location(in: self)
let calculatedPoint = CGPoint(x: newPoint.x - startPoint.x, y: newPoint.y - startPoint.y)
leftArm.position = CGPoint(x: leftArm.position.x + calculatedPoint.x, y: leftArm.position.y + calculatedPoint.y)
let radians = atan2(newPoint.x - leftArm.position.x, newPoint.y - leftArm.position.y)
leftArm.zRotation = -radians//this rotates the player
self.startPoint = newPoint
}
Спасибо за любую помощь.