2013-10-15 8 views
16

Ich mache ein Spiel und habe Probleme beim Drehen eines Sprite-Knotens, Das ist der Code, den ich habe; Was muss ich hinzufügen, um es zu drehen, sagen wir 45 Grad ?.Wie man einen Sprite-Knoten im Sprite-Kit dreht?

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]; 
+3

Es war sehr einfach, fügen Sie einfach die folgende Codezeile hinzu: platform.zRotation = M_PI/4.0; tschüss – Vince

Antwort

18

Sie machen SKAction für die Rotation und führen diese Aktion auf dem Knoten aus. zum Beispiel:

//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]; 
59

Genau dies zu tun, ohne Verwendung von Aktionen:

sprite.zRotation = M_PI/4.0f; 
+2

Dies sollte die akzeptierte Antwort sein. Es ist nicht notwendig, eine Aktion mit einer Dauer von null auszuführen, nur um ein Sprite zu drehen. –

14

den vordefinierten Wert Mit schneller wird:

sprite.zRotation = M_PI_4; 

Diese vordefinierten Konstanten in math.h sind als Literale und kann verwendet werden, um die tatsächliche Verarbeitung von Werten wie M_PI/4.0

+1

Unsinn. Es wird den gleichen kompilierten Code ergeben und die gleiche Zeit nehmen (der Unterschied wird unermesslich sein). Abgesehen davon gibt es keinen Grund, 'M_PI_4' nicht zu verwenden. – trojanfoe

+0

Oh, danke für das Aufräumen. Ich wusste nicht, dass M_PI/4 vorkompiliert wird, um den gleichen Wert wie M_PI_4 zu reflektieren. – ZeMoon

14
zu reduzieren

und

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

sind nicht das gleiche.

läuft der SKAction wird die Änderung animieren, auch wenn die Dauer 0 ist, wird es in sehr kurzer Zeit tun. Wenn Sie die zRotation ändern, wird sie in der neuen Rotation angezeigt.

Warum das wichtig ist: Wenn Sie ein neues Sprite hinzufügen, wird [SKAction rotateByAngle:] Flackern/Hässlichkeit im Sprite erzeugen, wie es auf der Ansicht erscheint.

Wenn das Sprite auf dem Bildschirm angezeigt wird und Sie es drehen möchten, ändert sich die zRotation nicht so gut wie rotatebyAngle: sogar mit 0 Dauer.

+1

Dies ist eine wichtige Unterscheidung. – JaredH

3

In Swift 2 ist die Art, wie ich habe mir war man konnte verwenden nächste

   sprite.zRotation = CGFloat(M_PI/2.0) //90 degrees 
       sprite.zRotation = CGFloat(M_PI/4.0) //45 degrees 
2
//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... 
+0

fügen Sie weitere Details zu Ihrer Antwort hinzu –

3

Für SWIFT 3/SWIFT 4 Version zu drehen:

sprite.zRotation = CGFloat(Double.pi/4) 

oder wenn Sie mögen Aktionen:

let rotateAction = SKAction.rotate(toAngle: CGFloat(Double.pi/4), duration: 0) 
sprite.run(rotateAction)