所以我有这个方法:
-(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];
}
,我试着在"update"函数中这样调用它:
-(void)update:(CFTimeInterval)currentTime {
[self levelLabel];
}
,但它不会工作。标签工作时没有褪色的动画。如果我把SKLabelNode放在initWithSize:
-(id)initWithSize:(CGSize)size {
...
}
它工作完美。
谁能告诉我哪里做错了?你的levelLabel
方法在每帧更新时被调用,这将导致每帧执行动作。
您只需要运行一次。因此,要么从更新中删除它,要么在运行操作之前添加以下检查:
if (![levelOne hasActions]) {
[levelOne runAction:sequence];
}
最好的方法是将其从更新方法中删除,并仅在必要时执行它,因为您在每一帧上创建标签(并每次将其添加到场景中,这也会增加您的节点计数),当您只能创建一次并仅在必要时更新它