在sprite工具包中使用更新功能调用动画方法

时间:2014-03-26 08:24:33

标签: ios sprite-kit

所以我有这个方法:

-(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 {
    ...
}

它完美无缺。

有人可以告诉我哪里出错了吗?

1 个答案:

答案 0 :(得分:4)

每次更新帧都会调用levelLabel方法,这会导致操作每个帧。

您只需运行一次。因此,要么从更新中删除它,要么在运行操作之前添加以下检查:

if (![levelOne hasActions]) {
    [levelOne runAction:sequence];
}

首选方法是将其从更新方法中删除,并仅在必要时执行它,因为您在每个帧上创建标签(并且每次都将它添加到场景中,这会使您的节点数量膨胀)只能创建一次并仅在必要时更新它