2016-05-02 124 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