在场景中为SKLabel设置动画?

时间:2014-04-20 09:23:14

标签: ios objective-c sprite-kit uiviewanimation sklabelnode

如何在场景中为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);

这里有什么问题?

2 个答案:

答案 0 :(得分: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:动作。

答案 1 :(得分:3)

因为 SKLabelNode SKNode 的子类,您可以使用名为 runAction:的方法并传入 SKAction < / strong>做你需要的。

// 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 Class Reference找到