web-dev-qa-db-ja.com

スプライトキットでスプライトノードを回転させる方法は?

ゲームを作成していますが、Spriteノードの回転に問題があります。これは私が持っているコードです。それを回すために何を追加する必要がありますか、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];
21
Vince

ローテーション用に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];  
19
BSevo

アクションを使用せずにこれを実行してください:

Sprite.zRotation = M_PI / 4.0f;

そしてSwift 4:

Sprite.zRotation = .pi / 4
67
quaertym
Sprite.zRotation = M_PI_4;

そして

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

同じではありません。

sKActionを実行すると、継続時間が0の場合でも変更がアニメーション化され、非常に短時間で変更が行われます。 zRotationを変更すると、新しい回転で表示されます。

これが重要な理由:新しいSpriteを追加すると、[SKAction rotateByAngle:]はビューに表示されるSpriteにちらつき/ ingさを作成します。

spriteが画面上にあり、それを回転させたい場合、zRotationの変更は、rotatebyAngleほど素敵ではありません:継続時間が0であっても。

14
J. V.

定義済みの値を使用すると、より高速になります。

Sprite.zRotation = M_PI_4;

Math.hのこれらの事前定義済み定数はリテラルとして使用でき、M_PI/4.0などの値の実際の処理を削減するために使用できます

14
ZeMoon

Swift 3/Swift 4次に使用できるバージョン:

Sprite.zRotation = .pi / 4

またはアクションが好きな場合:

let rotateAction = SKAction.rotate(toAngle: .pi / 4, duration: 0)
Sprite.run(rotateAction)
5
wm.p1us

In Swift 4私が回転させる方法は

Sprite.zRotation =  .pi / 2 // 90 degrees
Sprite.zRotation =  .pi / 4 // 45 degrees
3
Dave Levy
//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...
1