Перемещение SKSpriteNode в полукруге с виртуальным джойстиком
Я делаю игру, которая содержит виртуальный джойстик. Мой джойстик состоит из двух SKSpriteNode
один для флешки, другой для базовой панели. (см. картинку ниже)
Очевидно, что мой джойстик можно перемещать только после зеленого полукруга на панели.
Моя проблема здесь в том, что я пытаюсь сделать это, вот мой код сейчас:
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch: AnyObject in touches {
let location = touch.location(in: self)
guard isTracking else {
return
}
let maxDistantion = panel.radius
let realDistantion = sqrt(pow(location.x, 2) + pow(location.y, 2))
let needPosition = realDistantion <= maxDistantion ? CGPoint(x: location.x, y: location.y) : CGPoint(x: location.x / realDistantion * maxDistantion, y: location.y / realDistantion * maxDistantion)
if (needPosition.y > 0) {
stick.position = needPosition
} else {
stick.position = CGPoint(x: needPosition.x, y: 0)
}
data = AnalogJoystickData(velocity: needPosition, angular: -atan2(needPosition.x, needPosition.y))
}
}
С помощью этого кода я могу перейти в полукруг, но я бы переместил свою палку на зеленую линию, если кто-то может помочь мне с моей плохой математикой
Спасибо