2017-06-25 73 views
0

我使用Sprite Kit創建遊戲,並且我有一個問題,遊戲在每次重複我的主場景時都會慢慢失去fps。SpriteKit遊戲在主場景重啓後丟失FPS

我試過使用Xcode的工具,但沒有得到更接近我的問題的根源。

這是我的函數來結束比賽,目前遊戲對場景:

func endGame(){ 

    let endGameScene = SKScene(fileNamed: "EndGameScene") as! EndGameScene 
    endGameScene.score = score 




    //let transition = SKTransition.push(with: SKTransitionDirection.right, duration: 0.5) 
    self.view?.presentScene(endGameScene) 

    transitionNode = SKSpriteNode(color: UIColor.white, size: self.frame.size) 
    transitionNode.zPosition = 5 
    self.addChild(transitionNode) 
    transitionNode.run(SKAction.fadeIn(withDuration: 0.3)) 




    gameOver = true 


} 

這是我的功能來呈現遊戲場景爲 重啓按鈕之中的結果拍了拍:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
    let touch = touches.first 

    if let location = touch?.location(in: self) { 
     let nodeArray = self.nodes(at: location) 

     if(nodeArray.first?.name == "replayButton"){ 


      self.view?.presentScene(gameScene) 

      transitionNode = SKSpriteNode(color: UIColor.white, size: self.frame.size) 
      transitionNode.zPosition = 5 
      self.addChild(transitionNode) 
      transitionNode.run(SKAction.fadeIn(withDuration: 0.3)) 

我還檢查FO r使用儀器泄漏,但沒有出現。同樣,最重的堆棧跟蹤日誌顯示中花費最多的時間我的類文件沒有的區域,如下所示:(無法上傳圖片出於某種原因,所以這裏的鏈接)

https://puu.sh/wtrMZ/1bb8c6542a.png

遊戲以固定的60 fps開始,然後下降到58,然後下降到57,然後下降到55,然後下降到54,依此類推。我嘗試了deinit {}測試,並且場景釋放正常。我使用調試器來檢查我的內存使用情況,雖然它的確有點輕微上升,但在一次性使用中幾乎不會突破50 MB。我也並不認爲這是刪除未使用的節點的問題,因爲我一定要刪除它們在每種情況下,但我可能是錯的:

DEINIT

deinit { 

    self.removeAllChildren() 
} 

我是真的因爲我甚至不知道如何開始解決這個問題。非常感謝任何幫助或建設性的批評,謝謝。

編輯:

我從來沒有失效的兩個主要計時器在我的遊戲場景類。我只是失效他們在我的殘局功能:

`FUNC殘局(){

let endGameScene = SKScene(fileNamed: "EndGameScene") as! EndGameScene 
    endGameScene.score = score 




    //let transition = SKTransition.push(with: SKTransitionDirection.right, duration: 0.5) 
    self.view?.presentScene(endGameScene) 

    transitionNode = SKSpriteNode(color: UIColor.white, size: self.frame.size) 
    transitionNode.zPosition = 5 
    self.addChild(transitionNode) 
    transitionNode.run(SKAction.fadeIn(withDuration: 0.3)) 

    pillarTimer.invalidate() 
    durationTimer.invalidate() 



    gameOver = true 


}` 

固定我的問題很好。

+0

當您重新演出場景時,您不會刪除一件東西,nada,nadie。此外,不要通過遊戲場景來完成。讓視圖控制器去做。 –

+0

你能否提供一些細節? – Grilled

回答

0

嘗試self.removeChild(兒童名稱 - 在這裏)這就是我用它,它似乎工作。對不起,只是想分享我有類似的問題。