Cocos2D - CCLabelTTF - 等待运行结束

时间:2012-08-01 22:15:42

标签: objective-c cocos2d-iphone

简单地说,在我开始游戏的新级别之前,我会显示倒计时(使用CCLabelTTF,Cocos2D)。

我有这段代码:

centerLevelLabel.string=@"New level";
centerLevelLabel.visible=true;
[centerLevelLabel runAction:[CCFadeOut actionWithDuration:1]];


while (centerLevelLabel.numberOfRunningActions>0) {

}

centerLevelLabel.string=@"3";
while (centerLevelLabel.numberOfRunningActions>0) {

}



centerLevelLabel.string=@"2";
while (centerLevelLabel.numberOfRunningActions>0) {

}

centerLevelLabel.string=@"1";
while (centerLevelLabel.numberOfRunningActions>0) {

}

//一些代码吼叫

我想显示此标签,然后我需要继续下面的代码。问题是,UI是冻结的,并且在块运行无限循环时。但我不知道为什么,因为当运行动作完成后,numberOfRunningActions为零。

还有其他方法,我怎么能等待运行结束然后继续?

谢谢

2 个答案:

答案 0 :(得分:2)

这将永远是一个无限循环:

while (centerLevelLabel.numberOfRunningActions > 0) 
{
}

这与写作类似:

while (value > 0)
{
}

对于while循环运行的时间,线程被阻塞。因此,不会运行任何其他代码来更新操作数,或者可能更改值的值。

答案 1 :(得分:2)

您可以使用CCSequence序列化操作,并在原始操作完成后添加CCCallFuncN以执行某些代码。

id action1 = [CCFadeOut actionWithDuration:1];
id action2 = [CCCallFuncN actionWithTarget:self selector:@selector(finishedRunning)];
id sequenceActions = [CCSequence actions:action1, action2, nil]];

[centerLevelLabel runAction:sequenceActions];

...

   -(void) finishedRunning {
      // Do stuff after action finishes
   }