2013-10-15 13 views
16

Tworzę grę i mam problemy z obracaniem węzła sprite, To jest ten kod, który mam; Co muszę dodać, aby go obrócić, powiedzmy 45 stopni ?.Jak obrócić węzeł sprite w zestawie sprite?

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

To był bardzo prosty, po prostu dodaj następujący wiersz kodu: platform.zRotation = M_PI/4.0; pa, – Vince

Odpowiedz

18

Dokonujesz SKAction dla obrotu i uruchamiasz tę akcję na węźle. na przykład:

//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

Wystarczy zrobić to bez użycia działań:

sprite.zRotation = M_PI/4.0f; 
+2

To powinna być zaakceptowana odpowiedź. Nie ma potrzeby uruchamiania akcji o zerowym czasie trwania tylko po to, aby obrócić duszka. –

14

Korzystanie z predefiniowaną wartość będzie szybciej:

sprite.zRotation = M_PI_4; 

te predefiniowane stałe w math.h są dostępne jako literały i mogą być używane do zmniejszenia rzeczywistego przetwarzania wartości takich jak M_PI/4.0

+1

Nonsens. Spowoduje to ten sam skompilowany kod i zajmie tyle samo czasu (różnica będzie niezmierzona). Powiedziawszy to, nie ma powodu, aby nie używać 'M_PI_4'. – trojanfoe

+0

Och dzięki za oczyszczenie tego. Nie wiedziałem, że M_PI/4 zostanie prekompilowany, aby odzwierciedlał tę samą wartość co M_PI_4. – ZeMoon

14
sprite.zRotation = M_PI_4; 

i

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

nie są takie same.

uruchomienie SKAction spowoduje animację zmiany, nawet jeśli czas trwania wynosi 0, spowoduje to w bardzo krótkim czasie. zmiana zRotation wyświetli ją w nowym obrocie.

dlaczego to jest ważne: jeśli dodasz do niego nowy sprite [SKAction rotateByAngle:] spowoduje migotanie/brzydotę w sprite, gdy przychodzi na widok.

jeśli ikonka jest na ekranie i chcesz ją obrócić, zmiana zRotacja nie będzie tak ładna jak rotatebyAngle: nawet z czasem trwania 0.

+1

To ważne wyróżnienie. – JaredH

3

W Swift 2 sposób mam kopalni obracać był

   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

dodaj więcej informacji do swojej odpowiedzi –

3

Dla SWIFT 3/SWIFT 4 wersji można użyć obok:

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

lub jeśli chcesz działania:

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