Как повернуть спрайт node в комплекте спрайтов?
Я делаю игру, и у меня возникают проблемы с вращением спрайта node,
Это код, который у меня есть; Что мне нужно добавить, чтобы включить его, допустим, 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];
Ответы
Ответ 1
Вы делаете SKAction для вращения и выполняете это действие на node.
например:
//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
Просто сделайте это без использования действий:
sprite.zRotation = M_PI / 4.0f;
И в Swift 4:
sprite.zRotation = .pi / 4
Ответ 3
Использование предопределенного значения будет быстрее:
sprite.zRotation = M_PI_4;
Эти предопределенные константы в math.h доступны в виде литералов и могут использоваться для уменьшения фактической обработки таких значений, как M_PI/4.0
Ответ 4
sprite.zRotation = M_PI_4;
и
[sprite runAction:[SKAction rotateByAngle:M_PI_4 duration:0]];
не совпадают.
запуск SKAction будет анимировать изменение, даже если продолжительность равна 0, он сделает это за очень короткое время. изменение zRotation покажет его при новом вращении.
почему это важно: если вы добавите новый спрайт, сделанный на нем, [SKAction rotateByAngle:] создаст мерцание/уродство в спрайте, как оно появляется в представлении.
Если спрайт находится на экране, и вы хотите повернуть его, изменение zRotation будет не таким приятным, как rotatebyAngle: даже с длительностью 0.
Ответ 5
Для версии SWIFT 3/SWIFT 4 вы можете использовать следующее:
sprite.zRotation = .pi / 4
или если вам нравятся действия:
let rotateAction = SKAction.rotate(toAngle: .pi / 4, duration: 0)
sprite.run(rotateAction)
Ответ 6
В Swift 4 мой способ вращаться был
sprite.zRotation = .pi / 2 // 90 degrees
sprite.zRotation = .pi / 4 // 45 degrees
Ответ 7
//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...