调用sprite套件中更新功能的动画方法



所以我有这个方法:

-(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];
}

最好的方法是将其从更新方法中删除,并仅在必要时执行它,因为您在每一帧上创建标签(并每次将其添加到场景中,这也会增加您的节点计数),当您只能创建一次并仅在必要时更新它

最新更新