2013-10-15 153 views
16

我正在做一個遊戲,我在旋轉一個精靈節點時遇到麻煩, 這是我的代碼;我需要添加什麼才能打開它,比方說45度?如何旋轉精靈套件中的精靈節點?

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

它很簡單,只需添加以下代碼行: platform.zRotation = M_PI/4.0; 再見 – Vince

回答

18

您爲旋轉製作SKAction並在節點上運行該操作。 例如:

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

只是這樣做,而不使用操作:

sprite.zRotation = M_PI/4.0f; 
+2

這應該是公認的答案。沒有必要運行一個持續時間爲零的動作來旋轉一個精靈。 –

14

使用預定義的價值會更快:

sprite.zRotation = M_PI_4; 

在math.h中這些預定義的常量可以作爲文字,並可用於減少像M_PI/4.0的值的實際處理。

+1

廢話。它將導致相同的編譯代碼並且採取相同的時間(差別將是不可估量的)。話雖如此,沒有理由不使用'M_PI_4'。 – trojanfoe

+0

哦謝謝你清理這個。我不知道M_PI/4將被預編譯以反映與M_PI_4相同的值。 – ZeMoon

14
sprite.zRotation = M_PI_4; 

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

是不一樣的。

即使持續時間爲0,運行SKAction也會對變化進行動畫處理,它會在很短的時間內完成。更改zRotation會在新的輪換中顯示它。

爲什麼這很重要:如果你添加新的sprite在它上面[SKAction rotateByAngle:]將在精靈出現時在視圖中產生閃爍/醜陋。

如果精靈在屏幕上,並且您想旋轉它,改變zRotation將不會像rotatebyAngle那樣好:即使持續時間爲0。

+1

這是一個重要的區別。 – JaredH

3

在斯威夫特2我有我的旋轉方式是

   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

爲你的答案增加一些細節 –

3

對於SWIFT 3/SWIFT 4的版本,你可以使用下一個:如果你喜歡

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

或行動:

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