web-dev-qa-db-fra.com

Comment faire pivoter un nœud Sprite dans le kit Sprite?

Je fais un jeu et j'ai des problèmes avec la rotation d'un noeud Sprite, c'est le code que j'ai; Que dois-je ajouter pour le tourner, disons 45 degrés?.

SKSpriteNode *platform = [SKSpriteNode spriteNodeWithImageNamed:@"YellowPlatform.png"];
platform.position = CGPointMake(CGRectGetMidX(self.frame), -200+CGRectGetMidY(self.frame));
platform.size = CGSizeMake(180, 10);
platform.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:platform.size];
platform.physicsBody.dynamic = NO;
[self addChild:platform];
21
Vince

Vous effectuez SKAction pour la rotation et exécutez cette action sur le nœud. par exemple:

//M_PI/4.0 is 45 degrees, you can make duration different from 0 if you want to show the rotation, if it is 0 it will rotate instantly
SKAction *rotation = [SKAction rotateByAngle: M_PI/4.0 duration:0]; 
//and just run the action
[yourNode runAction: rotation];  
19
BSevo

Faites-le sans utiliser d'actions:

Sprite.zRotation = M_PI / 4.0f;

Et en Swift 4:

Sprite.zRotation = .pi / 4
67
quaertym
Sprite.zRotation = M_PI_4;

et

[Sprite runAction:[SKAction rotateByAngle:M_PI_4 duration:0]];

ne sont pas les mêmes.

l'exécution de SKAction animera le changement même si la durée est de 0, cela se fera sur une très courte période. changer la zRotation l'affichera dans la nouvelle rotation.

pourquoi cela est important: si vous ajoutez un nouveau sprite en le faisant, [SKAction rotationByAngle:] créera un scintillement/laideur dans le sprite à mesure qu'il apparaît sur la vue.

si le Sprite est à l'écran et que vous souhaitez le faire pivoter, la modification de la zRotation ne sera pas aussi agréable que la rotation de l'Angle: même avec une durée de 0.

14
J. V.

L'utilisation de la valeur prédéfinie sera plus rapide:

Sprite.zRotation = M_PI_4;

Ces constantes prédéfinies dans math.h sont disponibles sous forme de littéraux et peuvent être utilisées pour réduire le traitement réel de valeurs comme M_PI/4.0

14
ZeMoon

Pour Swift 3/Swift 4 version que vous pourriez utiliser ensuite:

Sprite.zRotation = .pi / 4

ou si vous aimez les actions:

let rotateAction = SKAction.rotate(toAngle: .pi / 4, duration: 0)
Sprite.run(rotateAction)
5
wm.p1us
//rotates player node 90 degrees
player.zRotation = CGFloat(M_PI_2)*3;
//rotates 180 degrees
player.zRotation = CGFloat(M_PI_2)*2;
//rotates 270 degrees
player.zRotation = CGFloat(M_PI_2)*1;
//rotates 360 degrees (where it was originally)
player.zRotation = CGFloat(M_PI_2)*4;
//rotates 315 degrees
player.zRotation = (CGFloat(M_PI_2)*1)/2;
and so on...
1
Chigo Godwin Anyaso