2013-11-21 32 views
9

SKSpriteNodeノードをY軸の周りに回転しようとしています。 zRotationプロパティがあり、ノードを時計回りまたは反時計回りに回転させることがわかります。しかし、私は自分のY軸(例えば、ダンスのバレリーナのような)の周りにノードを回転させたいと思います。そうするための機能を見つけることができないようです。これを行うための最良の方法は何ですか?ノードのY軸を中心にSKSpriteNodeを回転するにはどうすればよいですか?

+0

これはアニメーションまたは3Dと呼ばれます。 3Dフレームワークで3Dを行うことはできません。 –

+0

彼女は起立しています。明らかにトップダウンの場合は、zRotationが機能します。 – marina

+1

xScaleを1.0から-1.0に変更しようとすると、これは3Dタイプローテーションに最も近いものです – LearnCocos2D

答えて

5
SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithImageNamed:@"Spaceship"]; 
    sprite.position = location; 
    SKAction* action0 = [SKAction scaleXTo:1.0 duration:0.5]; 
    SKAction* action1 = [SKAction scaleXTo:0.1 duration:0.5]; 
    SKAction* action2 = [SKAction scaleXTo:-0.1 duration:0.5]; 
    SKAction* action3 = [SKAction scaleXTo:-1.0 duration:0.5]; 

    SKAction* action = [SKAction sequence:@[action0, action1, action2, action3]]; 
    [sprite runAction:[SKAction repeatActionForever:action]]; 

    [self addChild:sprite]; 

これは、3Dカードフリップのように見える何を取得しますが、明らかにあなたは文句を言わないスケールでプログラム的にそれを得る深さを持っているオブジェクトを期待している場合。

またはウェル少ないアニメーション(LearnCocos2Dが示唆したように):

SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithImageNamed:@"Spaceship"]; 
    sprite.position = location; 
    SKAction* action0 = [SKAction scaleXTo:1.0 duration:0.5]; 
    SKAction* action1 = [SKAction scaleXTo:-1.0 duration:0.5]; 

    SKAction* action = [SKAction sequence:@[action0, action1]]; 
    [sprite runAction:[SKAction repeatActionForever:action]]; 

    [self addChild:sprite]; 
6
通常

あなたが記述しているように見える、それが良い見たいように私が何かを回転させたいと思っていた場合、私はスプライトフレームを経由してそれを行います異なる回転度を描写する。

xScaleプロパティを1から-1にトゥイーンすることで、それを少しでも偽造することができます。逆も同様です。

xScaleのトリックは、おそらくカード(または紙のマリオ)で可能ですが、バレリーナではあまりありません。あなたは2Dオブジェクトの3D回転を探していますが、その方法では起こりません。

xScaleのトリックが必要でない場合は、スプライトフレームで処理する必要があります。ここで

は、あなたが望む回転を達成するためにできるようになる3D SpriteSheetの例です:

enter image description here

このアニメーションGIFは、そのY回転を得るためにスプライトフレームの例である:

enter image description here

1

SpriteKitは2.5Dの完全な機能(回転、X軸、Y軸、Z軸に沿った変換)を持っていませんが、私はSKSpriteNodes aroun dはX軸またはY軸のいずれかです。 SKViewはUIViewのサブクラスなので、CATransform3Dを使用してUIViewを回転させるのと同じ方法で3D空間内で回転できます。

主なポイントは、Y軸上で回転する必要があるスプライトは、それ自身のSKViewに表示される独自のシーンに存在することです。

ループ内で次のコードをトリガーすると、SKScene(SKSceneとSKSpriteNodeを含む)がy軸上でアニメートされます。メイン・シーンをバックグラウンドで同時に実行し、y軸でアニメートする必要があるスプライトを入れ替えてから、アニメーションが完了したらスワップして、Y回転シーンを取り除くことができます。これはきわめて簡単な解決策ではありませんが、Appleが2.5Dの優れた機能を追加するまではすべてあります。

さらに詳しい情報が必要な場合は、SpriteKitと2.5Dのチュートリアルをサンプルコードで作成しました。 http://www.sdkboy.com/?p=283

self.rotAngle -= 10; 

float angle = (M_PI/180.0f) * self.rotAngle/10; 

CATransform3D transform3DRotation = CATransform3DMakeRotation(1.0, angle, 0.0, 0.0); 

self.mySKView.layer.transform = transform3DRotation; 
2
SpriteNode *spriteNode = [SKSpriteNode [email protected]"Sprite"]; 
spriteNode.position = position; 

SKAction *action = [SKAction repeatActionForever:[SKAction customActionWithDuration:duration actionBlock:^(SKNode *node, CGFloat elapsedTime) { 
    node.xScale = sin(2 * M_PI * elapsedTime/duration); 
}]]; 

[self addChild:spriteNode]; 

しかし、スプライトには厚みを持たないように見えます。