Was running into some curious performance issues with:
NSMutableDictionary* creatureNodeDict // all my currently drawn sprites that are moving
after compiling all sprites that will be visible into keyArr, I remove the ones that moved off the screen, like so:
NSMutableArray* spritesToDel = [NSMutableArray arrayWithArray:self.creatureNodeDict.allKeys] ;
[spritesToDel removeObjectsInArray:keyArr];
to then remove them in a loop like:
for (NSString* key in spritesToDel) {
SKSpriteNode* node = [self.creatureNodeDict objectForKey:key];
[node removeFromParent];
}
now this was extremely slow, like 500ms for 700 sprites slow.
I was about to ask if anyone had any advice, when I tried it with a simple trick myself:
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];
Now removing 500-800sprites takes 20-40ms!