如何在sprite kit中旋转精灵节点?

时间:2013-10-15 20:06:50

标签: ios sprite-kit rotation

我正在制作游戏,我在旋转精灵节点方面遇到了麻烦, 这是我的代码;我需要添加什么来转动它,比方说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];

7 个答案:

答案 0 :(得分:66)

只需在不使用操作的情况下执行此操作:

sprite.zRotation = M_PI / 4.0f;

在Swift 4中:

sprite.zRotation = .pi / 4

答案 1 :(得分:19)

您为轮换进行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];  

答案 2 :(得分:14)

使用预定义的值会更快:

sprite.zRotation = M_PI_4;

math.h中的这些预定义常量可用作文字,可用于减少M_PI / 4.0等值的实际处理。

答案 3 :(得分:14)

sprite.zRotation = M_PI_4;

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

不一样。

运行SKAction将为更改设置动画,即使持续时间为0,它也会在很短的时间内完成。更改zRotation将在新轮换中显示它。

为什么这很重要:如果你在它上面添加新的精灵[SKAction rotateByAngle:]会在视图中出现精灵中的闪烁/丑陋。

如果精灵在屏幕上并且你想要旋转它,改变zRotation将不如rotatebyAngle那样好:即使持续时间为0。

答案 4 :(得分:5)

对于 SWIFT 3 / SWIFT 4 版本,您可以使用下一个:

sprite.zRotation = .pi / 4

或者如果你喜欢行动:

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

答案 5 :(得分:3)

在Swift 4中,我让我旋转的方式是

sprite.zRotation =  .pi / 2 // 90 degrees
sprite.zRotation =  .pi / 4 // 45 degrees

答案 6 :(得分:1)

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