23

ゲームを作成していますが、スプライト ノードの回転に問題があります。これは私が持っているコードです。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];
4

7 に答える 7

72

アクションを使用せずにこれを行うだけです:

sprite.zRotation = M_PI / 4.0f;

そしてSwift 4では:

sprite.zRotation = .pi / 4
于 2013-12-30T17:28:34.153 に答える
20

ローテーション用の 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];  
于 2013-10-16T08:28:56.950 に答える
15
sprite.zRotation = M_PI_4;

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

同じではありません。

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

これが重要な理由: 新しいスプライトを追加すると、[SKAction rotateByAngle:] を実行すると、スプライトがビューに表示されるときにちらつき/醜さが生じます。

スプライトが画面上にあり、それを回転させたい場合、zRotation の変更は、rotatebyAngle ほど適切ではありません。期間が 0 であってもです。

于 2014-07-11T02:42:53.117 に答える
6

Swift 4では、私が回転する方法は

sprite.zRotation =  .pi / 2 // 90 degrees
sprite.zRotation =  .pi / 4 // 45 degrees
于 2016-06-15T17:45:01.853 に答える