Ios7 SpriteKit中如何处理场景加载延迟

Ios7 SpriteKit中如何处理场景加载延迟,ios7,sprite-kit,Ios7,Sprite Kit,我正在为玩家加载一个选择场景,但是,当我点击移动到该场景的按钮时,需要4-5秒才能显示新场景 在主菜单中,我使用: SKTransition *transition = [SKTransition fadeWithDuration:0.1]; SKScene * scene = [[SelectionScene alloc] initWithSize:self.size]; [self.view presentScene:scene transition:transition]; 在Sel

我正在为玩家加载一个选择场景,但是,当我点击移动到该场景的按钮时,需要4-5秒才能显示新场景

在主菜单中,我使用:

SKTransition *transition = [SKTransition fadeWithDuration:0.1];

SKScene * scene = [[SelectionScene alloc] initWithSize:self.size];

[self.view presentScene:scene transition:transition];
在SelectionScene中,我使用:

- (id) initWithSize:(CGSize)size
{
    if (self = [super initWithSize:size]) {                

        [self setupScene];
        [self setupSelection];

    }

    return self;
}
如前所述,点击按钮到移动到下一个场景之间需要4-5秒。有没有办法在以后设置场景,使其首先显示下一个场景(我将显示加载屏幕)并在后台加载

我试过使用:

dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){

    //Background Thread
    dispatch_async(dispatch_get_main_queue(), ^(void){


    });
});

但这行不通

为了避免延迟,最佳做法是在游戏开始之前或关卡选择之后,首先使用loadSceneAssetsWithCompletionHandler函数加载所有屏幕资源

参考:

对于最简单的选项,我建议在当前场景中加载活动指示器(向属性发送startAnimating消息),在调度中加载场景,然后在最后的调度中,向活动指示器发送停止动画的消息

在当前场景对象的界面中包括此属性:

@property(strong, nonatomic) UIActivityIndicatorView *activityIndicator;
然后,无论您在何处加载场景(即touchesEnded事件),请使用以下内容:

[self.activityIndicator startAnimating];

dispatch_async(dispatch_get_main_queue(), ^{

    PVZLevelScene *levelScene =
    [[PVZLevelScene alloc] initWithSize:self.size level:theSelectedLevel];

    [self.view presentScene:levelScene
             transition:[SKTransition flipHorizontalWithDuration:0.5]];

    [self.activityIndicator stopAnimating];

});

请张贴您用来呈现场景的代码。我没有共享资源,我希望在级别选择后加载(呈现加载程序屏幕并在后台加载)。如何操作?在加载场景之前,您是否尝试过添加SKSpriteNode*加载屏幕节点和[self-addChild:self.loadingScreenNode]以及加载图标?是的。但是,在加载所有资源之前,它不会显示场景,并且需要很长时间(在所有资源完全加载之前,场景和加载屏幕节点不会显示),只是要澄清一下,这是您正在实现的流程吗?用户点击按钮-->将SKSpriteNode*加载屏幕节点添加到当前屏幕(显示加载屏幕)--->加载资源-->完成后移动到下一个场景。否。它是:移动到下一个屏幕,然后使用加载程序。