Sprite kit 从纹理创建SKSpriteNode需要太多时间

Sprite kit 从纹理创建SKSpriteNode需要太多时间,sprite-kit,skspritenode,sktexture,Sprite Kit,Skspritenode,Sktexture,我有一个充满精灵(30x30)的领域 在创建任何精灵之前,我将使用以下代码预加载纹理图集: - (void)preloadAllAtlases { BGLog(); _tilesAtlas = [SKTextureAtlas atlasNamed:@"Tiles"]; _tilesTextures = [NSMutableDictionary new]; __weak typeof (shared) weakSelf = self; [SKTextur

我有一个充满精灵(30x30)的领域

在创建任何精灵之前,我将使用以下代码预加载纹理图集:

- (void)preloadAllAtlases
{
    BGLog();

    _tilesAtlas = [SKTextureAtlas atlasNamed:@"Tiles"];
    _tilesTextures = [NSMutableDictionary new];
    __weak typeof (shared) weakSelf = self;

    [SKTextureAtlas preloadTextureAtlases:@[_tilesAtlas]
                    withCompletionHandler:^
                    {
                        for (NSString *textureFullName in weakSelf.tilesAtlas.textureNames) {
                            NSString *textureName = [textureFullName componentsSeparatedByString:@"@"][0];
                            weakSelf.tilesTextures[textureName] = [SKTexture textureWithImageNamed:textureName];
                        }
                    }];

}
此方法是从singleton once-in-AppingDidFinishLaunchingWithOptions调用的

当时间到来时,我从SKTextures生成SKSpriteNodes,并将复合节点(包含所有SKSpriteNodes的节点)添加到SKScene。但是显示/渲染192个精灵需要1到1.5秒。使用“时间档案器”,我发现[SKSpriteNode SpritentodeWithTexture:]需要花费很多时间

截图:

有没有办法加快精灵的创建速度


Thx.

您可以为每个瓷砖纹理创建一个精灵,然后复制这些模板精灵,而不是使用texture@LearnCocos2D,你认为复印会更快吗?还有一个问题:我的预加载方法可以吗?我对我的每一个纹理都保持了很强的参考。我不认为,我会尝试测量;)实际上,预加载看起来不错。有一些私有的SKTexture方法可以重写/swizzle,以查看是否以及何时从缓存中加载纹理。哦,等等,您正在从appdelegate运行预加载,这太早了。您需要有一个SKView实例,预加载代码应该在视图控制器(即viewDidLoad)中。在自定义skview子类中添加单例代码,而不是在它所属的位置添加单例代码。@LearnCos2D,我在viewDidLoad方法中添加了一个skview,并在那里创建了一个SKScene并演示它。我已经在SKScene子类的init方法中放置了预加载方法,但是。。。同样的延迟大约为1-1.5秒。