在屏幕上拖动时,Sprite跟随手指

时间:2018-07-17 18:23:06

标签: swift xcode sprite-kit

我正在尝试创建一种行走动画,其中小精灵移向可以在屏幕周围拖动的触摸位置。我已经设法让Xcode在手指被拖动的位置打印更新的X和Y坐标,但精灵几乎不会移动,而且我无法解决此问题。 touchesMoved已正确打印x和y坐标,但moveGuy函数将无法正确执行。

        override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
    for touch in touches { self.touchMoved(toPoint: touch.location(in: self))
        let location = touch.location(in: self)
        print(location)
        moveGuy(location: location)
    }
    }


override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
    guyMoveEnded()
}


func moveGuy(location: CGPoint) {
    var multiplierForDirection: CGFloat

    // 2
    let guySpeed = frame.size.width / 3.0

    // 3
    let moveDifference = CGPoint(x: location.x - guy.position.x, y: location.y - guy.position.y)
    let distanceToMove = sqrt(moveDifference.x * moveDifference.x + moveDifference.y * moveDifference.y)

    // 4
    let moveDuration = distanceToMove / guySpeed

    // 5
    if moveDifference.x < 0 {
        multiplierForDirection = -1.0
    } else {
        multiplierForDirection = 1.0
    }
    guy.xScale = abs(guy.xScale) * multiplierForDirection
    // 1
    if guy.action(forKey: "walkingInPlaceguy") == nil {
        // if legs are not moving, start them
        animateguy()
    }
    if guy.position == (location) {
        guyMoveEnded()
    }

    // 2
    let moveAction = SKAction.move(to: location, duration:(TimeInterval(moveDuration)))

    // 3
    let doneAction = SKAction.run({ [weak self] in
        self?.guyMoveEnded()
    })

    // 4
    let moveActionWithDone = SKAction.sequence([moveAction, doneAction])
    guy.run(moveActionWithDone, withKey:"guyMoving")
}

0 个答案:

没有答案