每個場景都不是單獨存在的。玩家能夠從一個場景中切換到另一個場景中。本小節,咱們來說解場景切換。在每個遊戲中都會使用到場景與場景的切換功能,例如,在街機原始人遊戲中,選擇關卡這一場景中,能夠看到有4關,這四關分別表明了4個場景,如圖2.20所示。swift
圖2.20 街機原始的關卡選擇框架
當玩家選擇第一關時,就會由選擇關卡的場景跳轉到第一關的場景中,如圖2.21所示。ide
圖2.21 第一關的場景動畫
當玩家選擇第二關時,就會由選擇關卡的場景跳轉到到第二關的場景中,如圖2.22所示。spa
圖2.22 第二關的場景orm
此時,它們就使用了到了場景與場景的切換功能,即當玩家輕拍相應的場景後,就會進入到到所選場景中。教程
單純的場景切換就是指,在場景與場景進行切換時是沒有任何過渡效果出現的。切換時須要使用到presentScene(_ scene: SKScene?)方法。遊戲
【示例2-7】如下將以項目2-1爲基礎,實如今輕拍屏幕後,場景GameScene切換至NewGameScene的功能,具備操做步驟以下:ip
(1)打開GameViewController.swift文件,在viewDidLoad()方法中的編寫代碼,實如今運行程序後,第一個顯示的場景是GameScene,代碼以下:遊戲開發
override func viewDidLoad() {
super.viewDidLoad()
let skView = self.view as SKView
if(skView.scene == nil){
skView.showsFPS=true
skView.showsNodeCount=true
let scene=GameScene(size: skView.bounds.size) //建立場景
scene.scaleMode=SKSceneScaleMode.Fill
skView.presentScene(scene) //顯示場景
}
}
(2)打開GameScene.swift文件,刪除touchesBegan(touches: NSSet, withEvent event: UIEvent)中的代碼,在其中編寫代碼,實現觸摸屏幕顯示NewGameScene場景的功能,代碼以下:
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
var nextScene=NewGameScene(size: self.size) //建立場景
self.view?.presentScene(nextScene) //顯示場景
}
此時運行程序,會看到如圖2.23所示的效果。
圖2.23 運行效果
使用單純的場景切換會使遊戲看起來十分生硬。因此遊戲開發者爲了解決這一不足之處,在切換過程當中爲遊戲添加了過渡效果,使場景與場景切換更加溫馨。這些過渡效果包括淡入淡出、水平關閉等,如表2-3所示。
表2-3 過渡動畫
若是想要讓一個場景在切換至另外一個場景時可使用到這些過渡動畫,須要使用到presentScene(_ scene:SKScene?, transition transition: SKTransition?)方法,其語法形式以下:
func presentScene(_ scene: SKScene?, transition transition: SKTransition?)
其中,_ scene表示新的場景,transition表示所使用的過渡動畫效果。
【示例2-8】如下將在示例2-7的基礎上實如今場景與場景切換時,加入一箇舊場景從中間向兩邊打開,新場景從後方向屏幕靠近的過渡動畫。具體的的操做步驟以下:
打開GameScene.swift文件,刪除touchesBegan(touches: NSSet, withEvent event: UIEvent)中的代碼,在其中編寫代碼,實現觸摸屏幕顯示NewGameScene場景的功能,代碼以下:
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
var nextScene=NewGameScene(size: self.size)
var doors=SKTransition.doorwayWithDuration(0.5)
self.view?.presentScene(nextScene, transition: doors) //過渡
}
此時運行程序,會看到如圖2.24所示的效果。
圖2.24 運行效果
過渡動畫除了可使用在圖2.24中所看到的外,還可使用其餘的效果,如如下的代碼就使用了flipHorizontalWithDuration的過渡動畫,即以水平中軸線垂直翻轉的過渡動畫,代碼以下:
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
var nextScene=NewGameScene(size: self.size)
var doors=SKTransition.flipHorizontalWithDuration(2)
self.view?.presentScene(nextScene, transition: doors) //過渡
}
此時運行程序,會看到如圖2.25所示的效果。
圖2.25 運行效果
本文選自:iOS遊戲框架Sprite Kit基礎教程——Swift版大學霸內部資料,轉載請註明出處,尊重技術尊重IT人!