2009-06-19 42 views
0

我正在用cocos2d進行遊戲,並且我想要刪除一組精靈。例如,我可能在屏幕上有一堆字符,但當我的遊戲結束時,我想清理它們。現在我已經創建了一個特殊效果(粒子系統)作爲分心,但是因爲它是透明的並且不能覆蓋所有可以看穿的屏幕,並且在我將它們從圖層中移除時觀察精靈消失。在遊戲循環中失速並自然移除精靈

此外,由於指令對用戶的執行速度如此之快,它看起來好像在粒子效應開始之前精靈會消失!

對我的2個問題有什麼建議嗎?謝謝。

NSMutableArray *toRemove = [[NSMutableArray alloc] init]; // array of sprites that I collect to remove 

spriteCount = 0; 
    if([self findAllSprites:parent forRemoval:toRemove] > 0){ // is there is at least one sprite to delete. If not then don't do anything 
     [self specialEffect]; // runs for maybe 3 seconds. 
        // how can I stall here so that the sprites aren't removed "instantaneously"? 
     for (Character* aCharacter in toRemove) { 
      [aCharacter.parent remove:aCharacter];  
     } 

}

回答

1

您可以使用performSelector:withObject:afterDelay:來延遲刪除操作。例如:

NSMutableArray *toRemove = [[NSMutableArray alloc] init]; // array of sprites that I collect to remove 
    spriteCount = 0; 
    if([self findAllSprites:parent forRemoval:toRemove] > 0){ // is there is at least one sprite to delete. If not then don't do anything 
     [self specialEffect]; // runs for maybe 3 seconds. 
     [self performSelector:@selector(removeSprites:) withObject: toRemove afterDelay:1.0]; 
    } 
    [toRemove release]; 

- (void) removeSprites: (NSArray*) toRemove 
{ 
    for (Character* aCharacter in toRemove) { 
     [aCharacter.parent remove:aCharacter];   
    } 
} 

注意performSelector:withObject:afterDelay:將保留文檔,刪除對象,並保持它活着,直到它調用removeSprites後,所以你不必做任何特殊處理的文檔,刪除(除非你仍然需要像所顯示的那樣釋放它,因爲你也擁有它)。

+0

謝謝!這非常有效。 – Stu 2009-06-19 16:42:46

1

你需要做你的「特殊效果」在一個線程中,所以它運行旁邊你的精靈刪除。查找NSThread以獲取更多信息,但這將使您能夠同步這兩個進程。