2017-01-25 16 views
1

Also wenn ich mein Spiel starte kann man spielen bis man stirbt, dann wird das Hauptmenü Scene angezeigt und wenn man auf den Bildschirm im Hauptmenü tippt sollte man das GameScene wieder laden aber ich erhalten einen Fehler, ich benutze diesen Code die GameScene zu präsentieren:Present Scene mit Sprite Kit in Swift

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
    let revealGameScene = SKTransition.fade(withDuration: 0.5) 
    let goToGameScene = GameScene(size: self.size) 
    goToGameScene.scaleMode = SKSceneScaleMode.aspectFill 
    self.view?.presentScene(goToGameScene, transition:revealGameScene) 
} 

und das Gleiche in das Hauptmenü zu präsentieren, wenn Sie sterben, die perfekt funktioniert gut, aber aus irgendeinem Grund ist es nicht funktioniert, wenn ich versuche, das präsentieren GameScene aus dem Hauptmenü

+0

, was der Fehler ist? –

+0

Schwerwiegender Fehler: unerwartet gefunden Null beim Entpacken ein optionaler Wert –

+0

keine Ahnung warum? Ich kann keine Lösung finden –

Antwort

0

Ich denke, dass es einen Fehler außerhalb dessen, was Sie uns zeigen, sein muss. Ich kann ein sehr einfaches Projekt erstellen, das auf einem MenuScene startet (vom GameViewController dorthin geleitet). Wenn Sie irgendwo auf das MenuScene klicken, gelangen Sie zum GameScene. Wenn Sie in der GameScene auf eine grüne Box klicken, gelangen Sie zurück zum MenuScene. Und du gehst herum und rum.

auf den Code Werfen Sie einen Blick und sehen, ob etwas anders verkaufen

class GameViewController: UIViewController { 

    var menuScene: MenuScene! 
    var skView: SKView! 

    override func viewDidLoad() { 

     super.viewDidLoad() 

     // Create and configure the scene. 
     skView = self.view as! SKView 

     menuScene = MenuScene(size: skView.bounds.size) 
     menuScene.scaleMode = .aspectFill 

     skView.ignoresSiblingOrder = true 

     skView.showsFPS = true 
     skView.showsNodeCount = true 


     // Present the scene. 
     skView.presentScene(menuScene) 
    } 
} 

class MenuScene: SKScene { 

    override init(size: CGSize) { 

     super.init(size: size) 

     self.anchorPoint = CGPoint(x: 0.5, y: 0.5) 
     let background = SKSpriteNode(color: .red, size: self.size) 
     background.position = CGPoint(x: 0, y: 0) 
     addChild(background) 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 

     let revealGameScene = SKTransition.fade(withDuration: 0.5) 
     let goToGameScene = GameScene(size: self.size) 
     goToGameScene.scaleMode = SKSceneScaleMode.aspectFill 
     self.view?.presentScene(goToGameScene, transition:revealGameScene) 
    } 
} 


class GameScene: SKScene { 

    private var box = SKSpriteNode() 

    override func didMove(to view: SKView) { 

     box = SKSpriteNode(color: .green, size: CGSize(width: 200, height: 200)) 
     box.position = CGPoint.zero 
     addChild(box) 
    } 

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 

     if let touch = touches.first as UITouch! { 

      let touchLocation = touch.location(in: self) 

      if box.frame.contains(touchLocation) { 

       let revealGameScene = SKTransition.fade(withDuration: 0.5) 
       let goToMenuScene = MenuScene(size: self.size) 
       goToMenuScene.scaleMode = SKSceneScaleMode.aspectFill 
       self.view?.presentScene(goToMenuScene, transition:revealGameScene) 
      } 
     } 
    } 
}