首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何处理SpriteKit中的场景加载延迟

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

Stack Overflow用户
提问于 2014-06-02 15:15:11
回答 2查看 1.8K关注 0票数 1

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

在主菜单中,我使用:

代码语言:javascript
复制
SKTransition *transition = [SKTransition fadeWithDuration:0.1];

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

[self.view presentScene:scene transition:transition];

在我使用的SelectionScene中:

代码语言:javascript
复制
- (id) initWithSize:(CGSize)size
{
    if (self = [super initWithSize:size]) {                

        [self setupScene];
        [self setupSelection];

    }

    return self;
}

正如所解释的,在轻敲按钮之间需要4-5秒,直到它移动到下一个场景。有没有办法在以后设置场景,让它首先显示下一个场景(我将显示一个加载屏幕)并在后台加载?

我尝试过使用:

代码语言:javascript
复制
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){

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


    });
});

但它不会起作用。

EN

回答 2

Stack Overflow用户

发布于 2014-06-02 15:26:12

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

参考:Adventure Loads Assets Asynchronously

票数 2
EN

Stack Overflow用户

发布于 2015-09-29 03:08:51

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

在当前SKScene对象的接口中包含此属性:

代码语言:javascript
复制
@property(strong, nonatomic) UIActivityIndicatorView *activityIndicator;

然后,无论在何处加载场景(即touchesEnded事件),请使用如下所示的内容:

代码语言:javascript
复制
[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];

});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23989113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档