Твоя главная проблема в том, что ты двигаешь свой мяч напрямую, как рука бога.
Что тебе нужно сделать, так это играть по системным правилам.Вместо непосредственного применения положения установите скорость мяча, чтобы толкать мяч туда, где находится ваш палец.Это требует некоторой математики:
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in touches {
//set the location's coordinate system to match the ball
let location = touch.location(in: ball.parent)
let angle = atan2(location.x,location.y)
let velocity = 1.0f //(change this to whatever speed you want your ball to move at)
ball.velocity = CGVector(velocity * cos(angle),velocity * sin(angle)) // you may have to swap around the sin/-sin/cos/-cos to get it the way you like it, I am assuming at angle 0 your ball is facing right, and it rotates in a counter clockwise direction)
}
}
Теперь ваш шар будет навсегда перемещен в сторону точки касания.
Чтобы избежать отскока, убедитесь, что вы установили восстановление на 0 на теле физики так, чтобыон теряет всю свою энергию при ударе о стену.
Также проверьте, что categoryBitmask
имеет некоторую степень 2 на всех объектах, которые требуют физики (1 работает в вашем примере), чтобы он мог столкнуться с чем угодно.в своем роде