2016-11-07 65 views
0

我無法轉換到預定位置在不同的場景。 (例如,當馬里奧進入隧道時,他回到原來的場景,他離開了)我能夠編碼的方式來到下一個場景,但節點不會出現,我希望它。轉換場景精靈套件

這是我的代碼過渡到第二個場景

func didBeginContact(contact: SKPhysicsContact) { 
    _ = contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask 

if (contact.bodyA.categoryBitMask == BodyType.cup.rawValue && contact.bodyB.categoryBitMask == BodyType.ball.rawValue) { 

touchmain() 


} else if (contact.bodyA.categoryBitMask == BodyType.ball.rawValue && contact.bodyB.categoryBitMask == BodyType.cup.rawValue) { 

touchmain() 

} 
} 

    func touchmain() { 

     let second = GameScene(fileNamed:"GameScene") 
     second?.scaleMode = .AspectFill 
     self.view?.presentScene(second!, transition: SKTransition.fadeWithDuration(0.5)) 
    } 

我真的很感激,如果你們能幫助一個年輕的開發出來。非常喜歡!

回答

0

有很多方法可以解決這個問題。一般的要點是,在離開現場之前只記得「馬里奧的」位置,並將它傳遞給下一個場景中的一個物業。 (或者您可以使用委託獲取信息)

如果場景是他在SceneA(主級別)傳輸到SceneB(小型貨幣通道)然後返回到SceneA(主級別)的場景中,您可以通過位置到SceneB並在SceneB中有一個存儲Mario所在位置的屬性。然後,當你驅車返回SceneA只是傳遞的財產返回到SceneA屬性和位置馬里奧和SceneA相應

func touchmain() { 

     let marioPos: CGPoint = Mario.position 

     let second = GameScene(fileNamed:"GameScene") 
     second.startingPos = marioPos 
     second?.scaleMode = .AspectFill 
     self.view?.presentScene(second!, transition: SKTransition.fadeWithDuration(0.5)) 
    } 
0

您可以使用SKScene的userData領域記住的位置:

某處第一現場的init,這樣做:

userData = [String : NSObject]() 

而且,在你的第一個場景,我們要根據您的用戶數據覆蓋didMove(to:SKView)設置馬里奧位置:

override func didMove(to:SKView) 
{ 
    super.didMove(to:to) 
    if let position = self.userData["position"] 
    { 
     mario.position = position 
    } 
} 

然後,我們要以實際分配的用戶數據轉移帶離現場時:

func touchmain() { 
     if let userData = self.userData 
     { 
      userData["marioPosition"] = mario.position 
     } 
     if let second = GameScene(fileNamed:"GameScene") 
     { 
      second.scaleMode = self.scaleMode //I assume we do not want to change scaleMode between scenes 
      second.userData = userData 
      self.view?.presentScene(second, transition: SKTransition.fadeWithDuration(0.5)) 
     } 
     else 
     { 
      print("Error creating Second scene") 
     } 
} 

當我們回來了,我們要的userData轉移回第一個畫面。這是我前面提到的didMove進場,這將把馬里奧的位置設置到先前的位置。

...我沒有看到這個代碼,所以儘量並將其應用到怎麼過你正在做它

func touchBackToFirst() { 

     if let first = GameScene(fileNamed:"GameScene") 
     { 
      first.scaleMode = self.scaleMode 
      first.userData = userData 
      self.view?.presentScene(first, transition: SKTransition.fadeWithDuration(0.5)) 
     } 
     else 
     { 
      print("Error creating Firstscene") 
     } 
}