2012-08-01 51 views
0

简单地说,在我开始新游戏之前,我显示倒计时(使用CCLabelTTF,Cocos2D)。Cocos2D - CCLabelTTF - 等待运行动作结束

我有这样的代码:

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


while (centerLevelLabel.numberOfRunningActions>0) { 

} 

[email protected]"3"; 
while (centerLevelLabel.numberOfRunningActions>0) { 

} 



[email protected]"2"; 
while (centerLevelLabel.numberOfRunningActions>0) { 

} 

[email protected]"1"; 
while (centerLevelLabel.numberOfRunningActions>0) { 

} 

//一些代码波纹管

我想告诉编辑方针标签,然后我需要继续代码波纹管。问题在于,UI被冻结,并且在块运行无限循环时首先被冻结。但是我不知道为什么,因为当运行动作完成时,numberOfRunningActions为零。

有没有其他办法,我该如何等待正在运行的动作结束,然后继续?

谢谢

回答

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 
    } 
+0

谢谢,这正是我需要的:) – 2012-08-10 05:50:58

2

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

while (centerLevelLabel.numberOfRunningActions > 0) 
{ 
} 

它类似于写作:

while (value > 0) 
{ 
} 

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