Comment faire pivoter sprite sprite kit avec swift
Salut à tous, mon problème est au sujet de la rotation de deux sprites. Quand je touche la moitié droite de l'écran commence la rotation et le déplacement sprite2 et sprite3. Si je touche la moitié gauche de l'écran, la rotation s'arrête à cause de la vitesse-vitesse = 0. Si je touche la moitié gauche de nouveau la rotation commence.
Cependant, si je touche la moitié de l'écran correspondant à la rotation en cours-direction de la vitesse est dupliqué. Je veux être en mesure de changer la direction de la rotation, mais pour la vitesse reste constante.
Vidéo montrant le problème: http://youtu.be/HxLwl1QZiNM
import SpriteKit
class GameScene: SKScene {
let sprite = SKSpriteNode(imageNamed:"bWhite")
let sprite2 = SKSpriteNode(imageNamed:"bBlue")
let sprite3 = SKSpriteNode(imageNamed:"bRed")
let circle = SKSpriteNode(imageNamed:"bCircle")
override func didMoveToView(view: SKView) {
/* Setup your scene here */
backColor = SKColor(red: 0, green: 0, blue: 0, alpha: 1)
self.backgroundColor = backColor
sprite.setScale(1.25)
sprite2.setScale(1)
sprite3.setScale(1)
sprite.position = CGPointMake(self.frame.size.width/2, (self.frame.size.height/2)-200);
circle.position = CGPointMake(self.frame.size.width/2, (self.frame.size.height/2)-200);
sprite3.zRotation = 172.77
sprite2.anchorPoint = CGPointMake(-1.10, 0.5);
sprite3.anchorPoint = CGPointMake(-1.10, 0.5);
self.addChild(sprite)
self.addChild(circle)
sprite.addChild(sprite2)
sprite.addChild(sprite3)
}
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
/* Called when a touch begins */
for touch: AnyObject in touches {
let location = touch.locationInNode(self)
let action = SKAction.rotateByAngle(CGFloat(M_PI), duration:1)
let action2 = SKAction.rotateByAngle(CGFloat(-M_PI), duration:1)
if (location.x > self.frame.size.width / 2)
{
sprite2.runAction(SKAction.repeatActionForever(action2))
sprite3.runAction(SKAction.repeatActionForever(action2))
} else {
sprite2.runAction(SKAction.repeatActionForever(action))
sprite3.runAction(SKAction.repeatActionForever(action))
}
}
}
- Donc pour voir si j'ai bien compris: Vous voulez que les cercles de commencer à tourner dans la direction indiquée par la première touche. Après cela, vous ne voulez être en mesure de changer l'orientation, et non pas de l'arrêter complètement?
- c'est exactement ce que je veux
- Je veux déplacer alors que je touche à gauche de la moitié de la rotation de l'écran à gauche, Si je ne touche pas arrêter et si je touche droite de la moitié de la rotation de l'écran à droite
- Désolé, voulez-vous passer en plus de la rotation ou vous parlez du fait que vous souhaitez déclencher la rotation en fonction de la position de la touche?
- Si je touche à gauche de la moitié de la rotation de l'écran à gauche, s'arrêter de toucher à gauche stop de rotation, sans bouger .Si je touche droite de la moitié de la rotation de l'écran à droite, s'arrêter de toucher droit de l'arrêt de la rotation, sans bouger.
- Je crois que mon code mis à jour ci-dessous réalise tout cela. 🙂
- Hey, j'ai une question à propos de votre réponse à l'adresse stackoverflow.com/questions/30410893/..., si vous pourriez m'aider ce serait génial.
Vous devez vous connecter pour publier un commentaire.
OK, prenez trois. Je ne suis pas sûr à 100% sur les spécificités de lors de la rotation de fin etc. mais toutes les pièces doivent être mis en place dans le code ci-dessous. Il permettra de:
interrupteur de rotation si l'utilisateur appuie sur l'autre moitié de l'écran
Edit: Changé exemple pour répondre aux besoins spécifiques de la question. Quelque chose de bizarre avec la mise en forme du code, pas tout à fait sûr de ce qui se passe là-bas.
else if currentRotationDirection == newRotationDirection
et de mettre en œuvrecurrentRotationDirection = .none
et d'appeler lastopRotation()
fonction danstouchesEnded
Je suggère le retrait de toutes les actions en cours avant d'en ajouter de nouveaux, car ils peuvent entrer en conflit. Je ne suis toujours pas sûr de ce que vous essayez d'atteindre, pouvez-vous expliquer plus?
Avez-vous tout simplement fatigué de retirer les actions à touchesEnded? J'ai eu un problème similaire avant où je voulais que mon objet à déplacer de gauche à droite sur la base duquel la moitié de l'écran, l'utilisateur a touché. J'ai eu un problème similaire où, si j'ai touché à droite et encore à droite ma vitesse double, et si j'ai touché à gauche de mon objet serait de tout arrêter.
J'ai résolu ce problème en ajoutant la touchesEnded méthode et juste enlevé les actions à chaque fois que je laisse aller. Il s'agit essentiellement du réinitialiser mon action de déplacement si l'objet s'arrête lorsque je laisse aller et s'en allait dans la direction opposée droit de suite au lieu d'avoir à taper deux fois.