2016-11-07 67 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") 
     } 
}