2017-01-16 94 views
0

我正在使用Xcode 8和Swift 3,試圖在暫停遊戲後在我的場景中顯示「恢復遊戲」按鈕,但由於一切都停止了,我有沒有找到一個正確的方法來做到這一點。我在此頁面上按照Mike的建議「Tap To Resume」 Pause text SpriteKit,但這並沒有幫助。暫停SpriteKit上的遊戲場景後嘗試顯示恢復按鈕

當我的暫停按鈕被竊聽,它運行與下面的代碼暫停功能:

func pauseGame() { 
    self.isPaused = true 
    self.physicsWorld.speed = 0 
    self.speed = 0.0 
    self.scene?.view?.isPaused = true 
} 

它看起來可能有點矯枉過正,但工程。如果我從暫停功能刪除

self.scene?.view?.isPaused = true 

,我能夠顯示水龍頭恢復按鈕,但我仍然可以在一些場景中SpriteKit節點的交互。我正在製作太空射擊遊戲,因此用戶仍然可以移動太空船並點擊發射,儘管子彈在我恢復現場之前不會移動。

我想過在暫停函數中添加一個布爾值「true」,並向上面的觸發和移動添加一條IF語句,但在我看來,這似乎讓事情變得複雜一點。

有關如何在暫停場景時顯示繼續按鈕的建議?

+0

爲什麼不直接顯示繼續按鈕作爲暫停功能的第一行? –

+0

我試過了,但是在恢復按鈕顯示之前一切都停止了。事實上,雖然沒有在上面顯示。代碼調用在pauseGame函數之前顯示按鈕。 –

+1

這可能是你要找的東西http://stackoverflow.com/questions/25824984/how-to-pause-completely-a-game-spritekit-scenekit-swift – 0x141E

回答

1

我的下一場比賽我敢肯定,我給聶的建議一試。至於我上面的問題,它使用下面顯示的代碼進行工作。附加代碼也是關閉暫停按鈕。現在這個工作,我可以添加fadeIn和fadeOut兩個按鈕的動作。

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { 
    for touch: AnyObject in touches { 

     let pointOfTouch = touch.location(in: self) 

     let nodeUserTapped = atPoint(pointOfTouch) 

     if nodeUserTapped.name == "PauseButton" { 
      if (self.isPaused == false) { 
       pauseGame() 
      } 
     } 

     if nodeUserTapped.name == "ResumeButton" { 
      if (self.isPaused == true) { 
       resumeGame() 
      } 

     } 
    } 
} 


// MARK: - pauseGame 
func pauseGame() { 
    self.isPaused = true 
    currentGameState = gameState.pauseGame 
    self.physicsWorld.speed = 0 
    self.speed = 0.0 
    if (backgroundMusicIsOn == true) { 
     backingAudio.stop() 
    } 
    if resumeButton.isHidden == true { 
     resumeButton.isHidden = false 
    } 
    if pauseButton.isHidden == false { 
     pauseButton.isHidden = true 
    } 
} 


// MARK: - resumeGame 
func resumeGame() { 
    self.isPaused = false 
    currentGameState = gameState.inGame 
    self.physicsWorld.speed = 1 
    self.speed = 1.0 
    if (backgroundMusicIsOn == true) { 
     backingAudio.play() 
    } 
    if resumeButton.isHidden == false { 
     resumeButton.isHidden = true 
    } 
    if pauseButton.isHidden == true { 
     pauseButton.isHidden = false 
    } 
} 
2

您無法與場景中的任何節點進行交互,因爲您完全暫停了它,這會暫停其所有子項,這是場景中的所有內容。爲了避免這種情況,僅暫停某些SKNode s(圖層)。

將某些節點添加到不同的SKNode s,因此您不能暫停整個場景,而只能暫停您希望暫停的圖層(SKNode)(gameLayer)。這將是這個樣子:

初始化節點

let gameLayer = SKNode() 
let pauseLayer = SKNode() 

現在,當你想要一個孩子添加到場景中,而不是將其添加到您希望它是一部分層:

添加子節點的主層

gameLayer.addChild(gameSceneNode) 
pauseLayer.addChild(resumeButton) 

d on't忘記將圖層添加到現場太

層添加到場景中

addChild(gameLayer) 
addChild(pauseLayer) 

要暫停層寫這樣的:在這個例子中

gameLayer.isPaused = true 

注意,gameLayer上的所有節點都將暫停,但pauseLayer上的所有節點都不會。

你完整的例子可能是這個樣子:

func pauseGame() { 

    gameLayer.isPaused = true 
    pauseLayer.isHidden = false 
    gameLayer.physicsWorld.speed = 0 
    gameLayer.speed = 0.0 

} 

func unpauseGame() { 

    gameLayer.isPaused = false 
    pauseLayer.isHidden = true 
    // Whatever else you need to undo 

}