Переместить спрайт, связанный с контактом, прикосновением? - PullRequest
0 голосов
/ 28 августа 2018

У меня есть узел спрайта, соединенный с другим узлом спрайта с помощью штифтового соединения, закрепленного как такового. Я пытаюсь смоделировать это, где зеленый спрайт перемещается пальцем: 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
    }

Спасибо за любую помощь.

...