2016-05-02 85 views
0

你好我已经做了我的游戏的第一级,但总是当我从主菜单屏幕到第一级屏幕冻结像2秒,从主屏幕转换到游戏是非常迟缓和迟缓有时甚至没有出现。有没有办法在背景中预先加载场景以防止延迟?预加载场景以防止滞后?

+0

我不知道你的代码是什么样的,但是我要做的是在主菜单屏幕加载后开始在后台渲染它,然后删除主菜单。渲染它有点像你的世界中的2D对象。你应该做的是在这些情况下提供你的代码的MCVE样本。 – DarmaniLink

+0

而我该如何在后台渲染它? –

+0

也意味着MCVE? :d –

回答

1

您可以在不同的线程中加载场景的资源。尽管事实上我正在加载大量资源,但我在我的游戏中做到了这一点,以获得真正活泼的场景转换。

使静态函数场景中的类预加载场景

class func createResources(withCompletion: (scene: BaseScene) ->()){ 

    // load resources on other thread 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), { 

     let scene = YourScene() 

     // callback on main thread 
     dispatch_async(dispatch_get_main_queue(), { 
      // Call the completion handler back on the main queue. 
      withCompletion(scene: scene) 
     }); 
    }) 

} 

这样称呼它

YourScene.createResources(withCompletion: { 
     [weak self] 
     scene in 

     self!.skView.presentScene(scene) 
    }) 

所以使用这个是建立场景的方式在不同的线程上前进。因为它在不同的线程上运行,你不应该得到那种尴尬的停顿。例如

。可以说玩家达到了击败关卡的目标。在我使用这种方法之前,游戏会在加载下一个场景之前暂停一秒。

当玩家现在击败关卡时,我仍然允许他们四处移动,直到下一个场景加载完毕,然后玩家立即进入下一关并创建即时转换。

你可以在这里看到它,当船超级间隔。有很多资源加载,但转换是无缝的。 https://www.youtube.com/watch?v=u_bXA3woOmo