2016-11-07 6 views
0

У меня возникли проблемы с переходом на предварительно определенное место на другой сцене. (например, когда Марио отправляется в туннель, он возвращается к исходной сцене прямо там, где он остановился). Я смог прописать способ добраться до следующей сцены, но узел не появился, я бы хотел.переход сценария сценария

это мой код, чтобы перейти ко второму Scene

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, где хранится Марио. Затем, когда вы передаете обратно 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

Вы можете использовать userData поле на SKScene помнить положение:

Где-то в первая INIT сцена, сделайте следующее:

userData = [String : NSObject]() 

Кроме того, в первой сцене, мы хотим переопределить didMove(to:SKView) установить позицию Марио на основе вашего UserData:

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") 
     } 
}