標籤:
iOS Sprite Kit教程之情境的切換Sprite Kit中切換情境
每一個情境都不是單獨存在的。玩家可以從一個情境中切換到另外一個情境中。本小節,我們來講解情境切換。在每一個遊戲中都會使用到情境與情境的切換功能,例如,在街機原始人遊戲中,選擇關卡這一情境中,可以看到有4關,這四關分別代表了4個情境,2.20所示。
圖2.20 街機原始的關卡選擇
當玩家選擇第一關時,就會由選擇關卡的情境跳轉到第一關的情境中,2.21所示。
圖2.21 第一關的情境
當玩家選擇第二關時,就會由選擇關卡的情境跳轉到到第二關的情境中,2.22所示。
圖2.22 第二關的情境
此時,它們就使用了到了情境與情境的切換功能,即當玩家輕拍相應的情境後,就會進入到到所選情境中。
Sprite Kit的單純的情境切換
單純的情境切換就是指,在情境與情境進行切換時是沒有任何過渡效果出現的。切換時需要使用到presentScene(_ scene: SKScene?)方法。
【樣本2-7】以下將以項目2-1為基礎,實現在輕拍螢幕後,情境GameScene切換至NewGameScene的功能,具有操作步驟如下:
(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 運行效果
Sprite Kit在具有過渡動畫的情境
使用單純的情境切換會使遊戲看起來十分生硬。所以遊戲開發人員為瞭解決這一不足之處,在切換過程中為遊戲添加了過渡效果,使情境與情境切換更加舒適。這些過渡效果包括淡入淡出、水平關閉等,如表2-3所示。
表2-3 過渡動畫
如果想要讓一個情境在切換至另一個情境時可以使用到這些過渡動畫,需要使用到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人!
iOS Sprite Kit教程之情境的切換