Comment déplacer un SKSpriteNode de haut en bas autour de sa valeur de départ dans Swift?

Je travaille actuellement sur un jeu, où il y a un SKSpriteNode. Je veux, que l'location de ce nœud monte et descende tout le time. Au début, il devrait avoir la valeur y par exemple 500. Ensuite, il devrait se déplacer de 200 px vers le bas (500 + 200 = 700) et ensuite 400 déplacer vers le haut (700-400 = 300) afin qu'il crée comme un haut et un bas, qui se déplace entre 500 + 200 et 500-200 tout le time . J'espère que je l'ai expliqué compréhensible. Premièrement, comment puis-je get cet effet et ensuite, où dois-je l'entrer? Dois-je utiliser une fonction personnalisée? Je programme avec swift (débutant à rapide)

J'ai écrit un exemple de code que vous pouvez adapter à vos besoins:

Premièrement, vous avez besoin de π pour les calculs d'oscillation:

 // Defined at global scope. let π = CGFloat(M_PI) 

Ensuite, SKAction pour pouvoir créer facilement des actions qui vont osciller sur le nœud en question:

 extension SKAction { // amplitude - the amount the height will vary by, set this to 200 in your case. // timePeriod - the time it takes for one complete cycle // midPoint - the point around which the oscillation occurs. static func oscillation(amplitude a: CGFloat, timePeriod t: Double, midPoint: CGPoint) -> SKAction { let action = SKAction.customActionWithDuration(t) { node, currentTime in let displacement = a * sin(2 * π * currentTime / CGFloat(t)) node.position.y = midPoint.y + displacement } return action } } 

Le displacement ci-dessus provient de l'équation du mouvement harmonique simple pour le déplacement. Voir ici pour plus d'informations (leur est un peu réarrangé, mais c'est la même équation).

Troisièmement, mettre tout cela set, dans le SKScene :

 override func didMoveToView(view: SKView) { let node = SKSpriteNode(color: UIColor.greenColor(), size: CGSize(width: 50, height: 50)) node.position = CGPoint(x: size.width / 2, y: size.height / 2) self.addChild(node) let oscillate = SKAction.oscillation(amplitude: 200, timePeriod: 1, midPoint: node.position) node.runAction(SKAction.repeatActionForever(oscillate)) } 

Si vous deviez aussi faire osciller le nœud sur l'axe des x, je reorderais d'append un argument d' angle à la méthode oscillate et d'utiliser sin et cos pour déterminer à quel point le nœud devrait osciller dans chaque axe.

J'espère que cela pourra aider!