我正在創建一個擁有多達5個不同場景(級別)的遊戲。然而,有多個場景,即使當我從一個場景轉換到另一個場景時,我也希望永遠只有一個無限的背景滾動。如何使用SpriteKit切換場景來創建無盡的滾動背景?
在google上找不到任何東西,所以期待這裏的答案。
我正在創建一個擁有多達5個不同場景(級別)的遊戲。然而,有多個場景,即使當我從一個場景轉換到另一個場景時,我也希望永遠只有一個無限的背景滾動。如何使用SpriteKit切換場景來創建無盡的滾動背景?
在google上找不到任何東西,所以期待這裏的答案。
在問一個關於堆棧溢出的問題時,總是會發布一些你之前嘗試過的代碼。當你沒有顯示任何代碼時,人們往往沒有幫助。
由於您不能同時運行多個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)
}
不知道這正是你在找什麼,但是這樣的事情可能是最簡單的方法。
希望這有助於
你可以有2個場景,當你轉變的同時運行,因此,如果你這樣做是正確,你可以實現OP想要什麼 – Knight0fDragon
我的猜測是使用'SKTransition.pushWithDirection'來達到他期望的效果 – Knight0fDragon
那是真的,我忘記了場景轉換。我只是在黑暗中拍攝,不知道OP如何設置滾動背景。 – crashoverride777