Я понял, что я делаю неправильно.Когда я настроил свое физическое тело для класса Skier, я назначил физическое тело следующим образом:
self.physicsBody? = SKPhysicsBody(rectangleOf: size)
, чтобы физическое тело фактически не было назначено спрайту.Я исправил это, изменив это на:
self.physicsBody = SKPhysicsBody(rectangleOf: playerSize)
, и теперь он работает отлично.Тем не менее, для тех, кто пытается достичь чего-то похожего на этот эффект с помощью перетаскивания пальца, перемещающего спрайт вокруг сцены, я в конечном итоге нашел гораздо более простое решение.У меня есть это в моем методе touchesMoved:
let touch = touches.first
if let location = touch?.location(in: self) {
let prev = touch?.previousLocation(in: self)
let impulse = CGVector(dx: 0.02 * (location.x - (prev?.x)!), dy: 0)
player.physicsBody?.applyImpulse(impulse)
}
И он работает, не беспокоясь о методах update, touchesBegan или touchesEnded.Гораздо проще и проще.