2015-12-20 59 views
-2

每當我嘗試加載之前在SpriteKit中加載的場景時,我的應用程序都會崩潰。重新加載SpriteKit中的場景會導致崩潰

我使用下面的代碼:

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    /* Called when a touch begins */ 
    for touch : AnyObject in touches { 
     let locationF = touch.locationInNode(self) 
     if levelsButtonBack.containsPoint(locationF){ 
      let goToy = inicio(fileNamed: "inicio") 
      scene?.view?.presentScene(goToy!, transition: SKTransition.fadeWithDuration(0.03)) 
     }    
    } 
} 

presentScene()行導致此崩潰在我的應用程序:

2015-12-20 11:53:40.630 Ball[19425:620103] *** Terminating app due to uncaught exception 
'Cant add body, already exists in a world', reason: 'Cant add body <SKPhysicsBody> type:<Rectangle> representedObject:[<SKSpriteNode> name:'(null)' texture:['nil'] position:{110, 300} scale:{1.00, 1.00} size:{200, 70} anchor:{0.5, 0.5} rotation:0.00], already exists in a world' *** First throw call stack: –   

如何解決這個問題?

+0

* 「的Xcode關閉我的應用程序」 *,* 「我需要解決這個錯誤」 * ???你的意思是你的代碼崩潰了?在這種情況下,查看實際的錯誤消息和堆棧跟蹤將會很有幫助。 – luk2302

+0

我只需要一個代碼來回老場景!你知道嗎? –

+1

這不是我們的工作方式,我們不只是爲你編碼。你必須準確地展示你到目前爲止已經嘗試過的方式,以什麼方式不起作用以及預期的結果是什麼 – luk2302

回答

1

錯誤消息告訴您足夠多:您嘗試加載的場景中有已存在於您已構建的SKPhysics世界中的對象。加載inicio()的結果時發生崩潰,該結果似乎對以前的狀態做出了一些不正確的假設,並返回了無法用presentScene()顯示的結果。

我們需要查看該函數的源代碼,然後才能再說。完整的堆棧跟蹤也會很有禮貌。

0

您可以通過刪除已有父項的所有內容來修復它。例如,您不能添加2個單個SKSpriteNode的實例,因爲它已經添加到父級。你將不得不刪除它。所以在場景加載之前,你必須確保SKPhysicsBody被刪除,以便它可以再次添加。

刪除對象以在重新加載場景時的其他示例如下:removeAllActions(),removeAllChildren()。另外,要改變到另一個視圖,我會使用下面的代碼。

let goToy = inicio(fileNamed: "inicio") 
let view = self.view as! SKView 
view.presentScene(goToy!, transition: SKTransition.fadeWithDuration(0.03))