Как замедлить до остановки вращающегося SKNode
У меня есть SKNode, представляющий собой круг, разделенный на четыре четверти (каждая четверть разным цветом). к этому кругу я установил SKAction, чтобы раскрутить его. У меня есть 3 проблемы / вопросы:
щас пользуюсь
obstacle.run(SKAction.repeat(rotateAction, count: 10))
которые всегда останавливаются в начальном порядке (верхний правый - фиолетовый, верхний левый - желтый и т. д.) - как я могу установить его разным (использовать случайную функцию?).когда круг вращается, его внезапная остановка (после 10 повторений) - проблема в том, что он не замедляется до своей остановки. Я хочу, чтобы это было более "реалистично" - быстро вращаться -> начинать замедляться -> останавливаться. как мне это сделать?
как я могу установить, что верхняя правая четверть будет немного больше, чем остальные три четверти? Я имею в виду, что в каждом вращении верхний правый будет немного отличаться?
вот мой код до сих пор:
class GameScene: SKScene {
let colors = [SKColor.yellow, SKColor.red, SKColor.blue, SKColor.purple]
override func didMove(to view: SKView) {
createWheel()
}
override func update(_ currentTime: TimeInterval) {
// Called before each frame is rendered
}
func createWheel() {
// 1
let path = UIBezierPath()
// 2
path.move(to: CGPoint(x: 0, y: 0))
// 3
path.addLine(to: CGPoint(x: 0, y: -200))
// 4
path.addArc(withCenter: CGPoint.zero,
radius: 200,
startAngle: CGFloat(0.0),
endAngle: CGFloat(3.0 * Double.pi / 2),
clockwise: false)
// 5
path.addLine(to: CGPoint(x: 200, y: 0))
let obstacle = obstacleByDuplicatingPath(path, clockwise: true)
obstacle.position = CGPoint(x: size.width/2, y: size.height/2)
addChild(obstacle)
let rotateAction = SKAction.rotate(byAngle: CGFloat(3.0 * CGFloat(Double.pi / 2)), duration: 0.5)
//obstacle.run(SKAction.repeatForever(rotateAction))
obstacle.run(SKAction.repeat(rotateAction, count: 10))
}
func obstacleByDuplicatingPath(_ path: UIBezierPath, clockwise: Bool) -> SKNode {
let container = SKNode()
var rotationFactor = CGFloat(Double.pi / 2)
if !clockwise {
rotationFactor *= -1
}
for i in 0...3 {
let section = SKShapeNode(path: path.cgPath)
section.fillColor = colors[i]
section.strokeColor = colors[i]
section.zRotation = rotationFactor * CGFloat(i);
let origin = CGPoint(x: 0.0, y: 0.0)
switch i {
case 0:
section.position = CGPoint(x: (origin.x + 10), y: (origin.y - 10))
case 1:
section.position = CGPoint(x: (origin.x + 10), y: (origin.y + 10))
case 2:
section.position = CGPoint(x: (origin.x - 10), y: (origin.y + 10))
case 3:
section.position = CGPoint(x: (origin.x - 10), y: (origin.y - 10))
default:
print("bolbol")
}
container.addChild(section)
}
return container
}
}