2016-08-31 93 views

回答

2

在問一個關於堆棧溢出的問題時,總是會發布一些你之前嘗試過的代碼。當你沒有顯示任何代碼時,人們往往沒有幫助。

由於您不能同時運行多個SKScenes並且場景以乾淨狀態啓動(除非將整個場景存檔),您最喜歡使用當前設置的滾動背景並將其用於所有場景場景。您可以使用協議擴展或子類共享代碼。

由於KingOfDragon非常友好地指出,您可以嘗試使用SKTransitions(例如pushInDirection)來獲得期望的結果。

如果這不起作用,並且您希望滾動背景在新場景中的確切位置恢復,您可以創建一些屬性,以便在場景更改之前存儲當前背景位置。在場景更改之後,您將背景設置爲新位置,使其看起來相同。

林不知道你的設置是,但頂部如果我的頭也可能是這樣的

創建上述任何場景類

let bgPosition = CGPoint() 

一個全局屬性比創建一個協議擴展您的滾動的背景代碼,使其可重複使用

protocol ScrollingBackground { } 
extension ScrollingBackground where Self: SKScene { 

    func loadScrollingBackground(at position: CGPoint) { 
     /// your code for the scrolling background 
     /// set position to position you pass in function 

    } 

比你的第一個場景你遵守協議和設置滾動的背景照常。 比添加在場景轉換時被調用的WillMoveFromView方法。將bgPosition屬性設置爲滾動背景的最後位置。

class Scene1: SKScene, ScrollingBackground { 

     .... 
     let backgroundPosition = .... 
     loadScrollingBackground(at: backgroundPosition) 



     override func willMoveFromView(view: SKView) { 
      bgPosition = ... //Set to current position of scrolling background  
     } 
    } 

少於其他場景你做相同的,但在bgPosition屬性傳遞(如上所述)將背景設置到它在場景1的位置。

class Scene2: SKScene, ScrollingBackground { 

     .... 
     loadScrollingBackground(at: bgPosition) 
    } 

不知道這正是你在找什麼,但是這樣的事情可能是最簡單的方法。

希望這有助於

+1

你可以有2個場景,當你轉變的同時運行,因此,如果你這樣做是正確,你可以實現OP想要什麼 – Knight0fDragon

+1

我的猜測是使用'SKTransition.pushWithDirection'來達到他期望的效果 – Knight0fDragon

+0

那是真的,我忘記了場景轉換。我只是在黑暗中拍攝,不知道OP如何設置滾動背景。 – crashoverride777