2014-10-06 23 views
1

也陷入了一些奇怪的性能問題:編譯所有的精靈,這將是可見的成keyArr後SKSpriteNode removeFromParent很慢

NSMutableDictionary* creatureNodeDict // all my currently drawn sprites that are moving 

,我刪除離開屏幕,像這樣的:

NSMutableArray* spritesToDel = [NSMutableArray arrayWithArray:self.creatureNodeDict.allKeys] ; 
[spritesToDel removeObjectsInArray:keyArr]; 

到那麼像一個循環將其刪除:

for (NSString* key in spritesToDel) { 
     SKSpriteNode* node = [self.creatureNodeDict objectForKey:key]; 
     [node removeFromParent]; 
    } 

現在,這是非常SLO w,對於700個精靈來說,就像500ms一樣慢。

回答

1

我要問,如果任何人有任何建議,當我用一個簡單的伎倆沒有嘗試過自己:

NSMutableArray* spritesToRemoveArray = [[NSMutableArray alloc] init]; 
for (NSString* key in spritesToDel) { 
    SKSpriteNode* node = [self.creatureNodeDict objectForKey:key]; 
    if (node.parent == mainParentNode) { 
     [spritesToRemoveArray addObject:node]; 
    } 
    else { 
     AFLog(@"parent %@ is not map", node.parent); 
     [node removeFromParent]; 
    } 
} 
[mainParentNode removeChildrenInArray:spritesToRemoveArray]; 

現在除去500-800sprites需要20-40ms!