Перемещение SKSpriteNode в полукруге с виртуальным джойстиком

Я делаю игру, которая содержит виртуальный джойстик. Мой джойстик состоит из двух SKSpriteNodeодин для флешки, другой для базовой панели. (см. картинку ниже)

Virutal Джойстик

Очевидно, что мой джойстик можно перемещать только после зеленого полукруга на панели.

Моя проблема здесь в том, что я пытаюсь сделать это, вот мой код сейчас:

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))
    }
}

С помощью этого кода я могу перейти в полукруг, но я бы переместил свою палку на зеленую линию, если кто-то может помочь мне с моей плохой математикой

Спасибо

0 ответов

Другие вопросы по тегам