Мой сценарий заключается в том, что я перемещаю существующий узел вдоль арки и хотел бы, чтобы он остановился, как только он достигнет другой стороны.Простая аналогия состоит в том, что я хочу, чтобы что-то двигалось по радуге.
Мой текущий код, хотя и выполняет правильный овал, но затем он продолжается ниже моей исходной точки, чтобы вернуться к своей начальной точке.Я понимаю, что могу лучше контролировать круг, чтобы остановиться там, где я хочу, но для моего случая использования круговой путь не будет работать.
Сокращенная версия моего кода:
override func didMove(to view: SKView) {
let size = CGSize(width: frame.width - 60, height: 100)
let box = SKSpriteNode(color: .orange,
size: CGSize(width: 30, height: 30))
box.position = CGPoint(x: frame.midX, y: frame.midY)
addChild(box)
let origin = CGPoint(x: 30, y: frame.midY)
let rect = CGRect(origin: origin, size: size)
let path = UIBezierPath(ovalIn: rect)
let action = SKAction.follow(path.cgPath,
asOffset: false,
orientToPath: false,
speed: 250)
box.run(action)
}
Приведенный выше код выдает это при запуске:
Моя цель - остановить оранжевую коробку, как только она достигнет левой стороны.
Я просмотрел различные инициализаторы UIBezierPath, и единственное, что выглядит многообещающе, - это использовать UIBezierPath(cgPath:)
.В идеале мне нужно было бы cgPath
, чтобы заполнить это, чтобы удовлетворить мои критерии.