所以我有这个方法:
-(void)levelLabel {
SKLabelNode *levelOne = [SKLabelNode labelNodeWithFontNamed:@"Chalkduster"];
levelOne.fontSize = 25;
levelOne.fontColor = [SKColor whiteColor];
levelOne.text = @"Level 1";
levelOne.position = CGPointMake(self.frame.size.width/2, self.frame.size.height/2);
[self addChild:levelOne];
SKAction *stageNumberIn = [SKAction fadeInWithDuration:1.0];
SKAction *stageNumberOut = [SKAction fadeOutWithDuration:1.5];
SKAction *remove = [SKAction removeFromParent];
SKAction *sequence = [SKAction sequence:@[stageNumberIn, stageNumberOut, remove]];
[levelOne runAction:sequence];
}
我试着在"更新"功能如下:
-(void)update:(CFTimeInterval)currentTime {
[self levelLabel];
}
但它不会奏效。标签在没有褪色动画的情况下工作。如果我把SKLabelNode放在initWithSize中:
-(id)initWithSize:(CGSize)size {
...
}
它完美无缺。
有人可以告诉我哪里出错了吗?
答案 0 :(得分:4)
每次更新帧都会调用levelLabel
方法,这会导致操作每个帧。
您只需运行一次。因此,要么从更新中删除它,要么在运行操作之前添加以下检查:
if (![levelOne hasActions]) {
[levelOne runAction:sequence];
}
首选方法是将其从更新方法中删除,并仅在必要时执行它,因为您在每个帧上创建标签(并且每次都将它添加到场景中,这会使您的节点数量膨胀)只能创建一次并仅在必要时更新它