如何在场景中为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);
这里有什么问题?
答案 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找到