Sprite kit SKSpriteNode从父级移除非常缓慢

Sprite kit SKSpriteNode从父级移除非常缓慢,sprite-kit,2d-games,Sprite Kit,2d Games,在以下方面遇到了一些奇怪的性能问题: NSMutableDictionary* creatureNodeDict // all my currently drawn sprites that are moving 在将所有可见的精灵编译成keyArr后,我删除了从屏幕上移出的精灵,如下所示: NSMutableArray* spritesToDel = [NSMutableArray arrayWithArray:self.creatureNodeDict.allKeys] ; [sprite

在以下方面遇到了一些奇怪的性能问题:

NSMutableDictionary* creatureNodeDict // all my currently drawn sprites that are moving
在将所有可见的精灵编译成keyArr后,我删除了从屏幕上移出的精灵,如下所示:

NSMutableArray* spritesToDel = [NSMutableArray arrayWithArray:self.creatureNodeDict.allKeys] ;
[spritesToDel removeObjectsInArray:keyArr];
然后在循环中删除它们,如:

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

现在速度非常慢,700个精灵的速度慢了500毫秒。

我正要问有没有人有什么建议,这时我自己用了一个简单的小把戏:

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-800个精灵需要20-40毫秒