2012-08-01 67 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循環運行時,線程被阻塞。因此,不會運行其他代碼來更新操作的數量,或者可能會更改值的值。