I want that when touches began the player (red circle) moves to the opposite side of the circular path. I already made that the player follows a path, but I havent find answer to my question on internet.
override func didMoveToView(view: SKView) {
player = SKSpriteNode(imageNamed: "circulo")
player.position = CGPoint(x: self.frame.width / 2, y: self.frame.height / 2 - 170)
player.color = colorGris
player.colorBlendFactor = 1
player.size = CGSize(width: 25, height: 25)
self.addChild(player)
player.zPosition = 3
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
/* Called when a touch begins */
if gameStarted == false {
gameStarted = true
moveClockWise()
movingClockWise = true
}
}
func moveClockWise(){
let dx = player.position.x - self.frame.width / 2
let dy = player.position.y - self.frame.height / 2
let rad = atan2(dy, dx)
path = UIBezierPath(arcCenter: CGPoint(x:self.frame.width / 2, y: self.frame.height / 2) , radius: 170, startAngle: rad, endAngle: rad + CGFloat(M_PI * 4), clockwise: true)
let follow = SKAction.followPath(path.CGPath, asOffset: false, orientToPath: true, speed: 200)
player.runAction(SKAction.repeatActionForever(follow).reversedAction())
}
One of the easiest ways to move an object in a circular path is to
SKNode
containerx
position to the radius of the circular pathIf you want to move the sprite to the other side or change the rotation's radius, simply
x
positionIf you want to change the direction of the rotation,
Example Code:
I think you could follow these steps:
runAction
of your player:You can do for example:
To stop do simply:
To do it I try to use your code to make it understandable:
To do this trick you can write:
runAction
:Here you can re-launch:
Addition: If you can add some nice animation like for example the jump between the point position and the mirrored point in the circle, you need to know the
CGPoint
destination (in the mirrorPath it will be the "moveToPoint" or the also the first point). Here you can find an extension to obtain allCGPath
points so:In the Sprite-kit framework there isn't yet a jumpAction between the available
SKAction's
, so you can create it with few code.Usually the "jump" is maked by changing the Y coordinate, in you case your view is from high so you can do a zoomIn e zoomOut (scale).