在sprite工具包中使用更新函数的animation调用方法

所以我有这个方法:

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

但它不会工作。 标签的工作没有衰落的animation。 如果我把SKLabelNode放在initWithSize中:

 -(id)initWithSize:(CGSize)size { ... } 

它工作完美。

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

您的levelLabel方法被称为每帧更新,这将导致行动帧执行。

你只需要运行一次。 因此,请将其从更新中删除,或者在运行操作之前添加以下检查:

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

首选方法是将其从更新方法中删除,并且只在需要时才执行它,因为您在每个帧上创build标签(并且每次将其添加到场景中时也会使节点膨胀)只有一次,只有在必要时才更新