2017-02-19 5 views
0

У меня есть игра, в которой у меня есть две сцены: FarmScene и WoodScene. Каждая сцена имеет файл .SKS и файл .swift - один для дизайна и один для кодирования. мне удалось перейти от FarmScene к WoodScene так:Правильный способ перехода на другой файл .SKS

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
    for touch in touches { 
     let location = touch.location(in: self) 
     let node : SKNode = self.atPoint(location) 
     if node.name == "WoodIcon" { 
      if let view = self.view as! SKView? { 
       // Load the SKScene from 'GameScene.sks' 
       if let scene = SKScene(fileNamed: "WoodScene") { 
        // Set the scale mode to scale to fit the window 
        scene.scaleMode = .aspectFill 

        // Present the scene 
        view.presentScene(scene) 
       } 
      } 
     } 
    } 
} 

В моих предыдущих играх я использовал SKTransition, чтобы перейти к различным сценам, и что я мог бы сделать некоторые интересные переходы, как флип, замирание и толчок.

Мне было интересно, если это «правильный» способ изменения сцен при использовании конструктора сцены в Xcode? Или, может быть, я что-то упустил.

Ожидается, что вы услышите от вас.

ответ

0

Я бы не делал этого так с петлей, просто чтобы удержать вас от потенциального запуска этого кода презентации более одного раза. Возможно настроить ваш touchesBegan метод с охранным заявлением

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
    // Guard to just use the first touch 
    guard let touch = touches.first else { return } 
    let location = touch.location(in: self) 
    let node : SKNode = self.atPoint(location) 
    if node.name == "WoodIcon" { 
     if let view = self.view as! SKView? { 
      // Load the SKScene from 'GameScene.sks' 
      if let scene = SKScene(fileNamed: "WoodScene") { 
       // Set the scale mode to scale to fit the window 
       scene.scaleMode = .aspectFill 

       // Present the scene 
       view.presentScene(scene) 
      } 
     } 
    } 
} 

Кроме того, если вы хотите сделать пользовательский переход через код, который вы можете сделать что-то вроде этого:

func customTransition() { 

    // Wait three seconds then present a custom scene transition 
    let wait = SKAction.wait(forDuration: 3.0) 
    let block = SKAction.run { 

     // Obviously use whatever scene you want, this is just a regular GameScene file with a size initializer 
     let newScene = SKScene(fileNamed: "fileName")! 
     newScene.scaleMode = .aspectFill 
     let transitionAction = SKTransition.flipHorizontal(withDuration: 0.5) 
     self.view?.presentScene(newScene, transition: transitionAction) 

    } 
    self.run(SKAction.sequence([wait, block])) 

} 

Я бы не сказал, что это право или неправильный путь, просто предпочтение о том, как вы хотите, чтобы переход выглядел.

Смежные вопросы