0

シーン内の SKLabel の位置をアニメーション化するにはどうすればよいですか?

次のことを試しましたが、うまくいかないようです。

[SKView animateWithDuration:0.3
                                  delay:0.0
                                options:UIViewAnimationOptionCurveEaseOut
                             animations:^{
                                 newBestLabel.position = CGPointMake(CGRectGetMinX(self.frame)+70, CGRectGetMaxY(self.frame)-30);
                             }
                             completion:^(BOOL finished){}];

[UIView animateWithDuration:0.3
                                  delay:0.0
                                options:UIViewAnimationOptionCurveEaseOut
                             animations:^{
                                 newBestLabel.position = CGPointMake(CGRectGetMinX(self.frame)+70, CGRectGetMaxY(self.frame)-30);
                             }
                             completion:^(BOOL finished){}];

viewDidLoad では、次の場所から始まります。

newBestLabel.position = CGPointMake(CGRectGetMinX(self.frame)+70, CGRectGetMaxY(self.frame)+30);

ここで何が問題なのですか?

4

2 に答える 2

3

SKLabelNodeから継承されUIViewず、これは SpriteKit でアニメーションを処理する方法ではありません。むしろ、SKActionを作成してノードに適用することで、これを処理する必要があります。

SKLabelNode *label = [SKLabelNode labelNodeWithFontNamed:@"Avenir"];
label.position = CGPointMake(30, 200);
label.text = @"Lorem Ipsum";
[self addChild:label];

SKAction *moveLabel = [SKAction moveByX:100 y:0 duration:2.0];
[label runAction:moveLabel];

コードと同じ座標ではありませんが、ここから取得できると確信しています。要件に適している場合は、 moveTo: アクションもあります。

于 2014-04-20T10:45:32.720 に答える
3

SKLabelNodeは SKNode のサブクラスであるため、 runAction:という名前のメソッドを使用して、必要な処理を行うSKActionを渡すことができます。

// create an instance of SKAction
SKAction *moveLabel = [SKAction moveByX:0.0 y:30.0 duration:1.2];

// tell labelNode to run the action
[newBestLabel runAction:moveLabel];

SpriteKit が使用する座標系がUIKitの座標系とは異なることにも注意してください。したがって、上記のコードでは、正の x 値は右に移動し、正の y 値は上に移動します!

必要なことを実行するために使用できるメソッドは多数あり、SKAction クラス リファレンスに記載されています。

于 2014-04-20T10:46:27.447 に答える