Я решил свою проблему. Я знал, что должен был по существу переместить узел относительно местоположения касания, но я не был уверен, как это сделать. Вот как я получил это работает.
Сначала я создал переменную, которая была бы равна местоположению касания игроков. Эта переменная устанавливается в touchesBegan.
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?)
{
if game.state == .game
{
let position = touch.location(in: playableArea)
playerTouchPosition = position
}
}
Я использую эту переменную в качестве начальной точки касания. Когда игрок перемещает палец, он рассчитывает, насколько игрок сдвинул палец относительно начальной точки. Например, если игрок коснулся значения X 100 и переместил палец к значению X 120, он рассчитал, что игрок переместил палец на 20. После нахождения этого значения я установил playerTouchPosition в положение touchesMoved. Это должно сделать следующий ход относительно предыдущего касания. Затем я перемещаю узел игроков на величину, на которую игрок сдвинул их палец.
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in touches
{
if game.state == .game
{
let position = touch.location(in: playableArea)
let newX : CGFloat!
if position.x > playerTouchPosition.x
{
newX = position.x - playerTouchPosition.x
}else
{
newX = -(playerTouchPosition.x - position.x)
}
playerTouchPosition = position
game.playerNode.position.x = game.playerNode.position.x + newX
}
}
}
Это остановило нод игрока от немедленного перемещения туда, где когда-либо было значение X местоположений касания.