2009-06-19 26 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以获取更多信息,但这将使您能够同步这两个进程。