#swift #macos #sprite-kit #skshapenode
Вопрос:
macOS 11.15.2
Используя SpriteKit, я установил десять кругов подряд. Я использую a CGMutablePath
, чтобы пару раз зациклить их. Каждый круг получает точно такой же путь, с точки зрения геометрии.
Есть несколько вероятных вещей, которые я здесь вижу. Один из них заключается в том, что при любом заданном пробеге не все круги в конечном итоге выстроятся в линию, и, как таковые, они на самом деле не должны были следовать по одному и тому же пути. Кроме того, при пробежке, результаты разные. На некоторых пробегах круги выглядят почти правильно выстроенными, а на других пробегах они дико расходятся.
Наконец, если вы установите смещение между кругами 0
равным (полностью перекрывая их), круги в конечном итоге пойдут по одному и тому же пути во время одного прогона (хотя трудно сказать, пройден ли прогон).
Гравитация не включена.
Мне нужны детерминированные результаты.
Вот соответствующий код, который генерирует путь и добавляет круги к игровой сцене:
private func loopAction(from:CGPoint, duration:TimeInterval, centripetalRadius: CGFloat) -> SKAction{
let path = CGMutablePath()
path.move(to: from)
path.addArc(center: CGPoint(x: CGFloat(from.x), y: from.y), radius: centripetalRadius, startAngle: CGFloat(2*Double.pi), endAngle: CGFloat(2*Double.pi - 30), clockwise: true)
let action = SKAction.follow(path, asOffset: false, orientToPath: false, duration: duration)
return action
}
func wave(){
var circle:SKShapeNode
let radius:CGFloat = 20;
let centripetalRadius:CGFloat = 60;
let screenCenter = CGPoint(x:gameScene.frame.maxX/2, y:gameScene.frame.maxY/2)
let xOffset = 40;
for n in 0...9{
circle = SKShapeNode(circleOfRadius:radius)
circle.run(
loopAction(from: CGPoint(x: screenCenter.x CGFloat(n*xOffset),y: screenCenter.y), duration: 2, centripetalRadius: centripetalRadius))
gameScene.addChild(circle)
}
}
Вот несколько скриншотов, чтобы показать, что я имею в виду (3 разных прогона):
Комментарии:
1. …Я вижу, что если я изменю его так, чтобы я буквально использовал один и тот же экземпляр SKAction для циклического перемещения по кругу, то это действительно работает. …но разве это не должно привести к тому же самому пути?