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


怎么了

最佳答案

由于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 Class Reference中提供了许多方法来满足您的需求,并且还有更多其他方法。

10-08 07:45