Swift - обновление сцены для запуска gameloop после выполнения сегмента
- Привет.
Я новичок в Swift, и мне нужна помощь. Пожалуйста, простите любые ошибки новичков.
В настоящее время я запускаю приложение, которое использует следующий метод обновления для перемещения фигуры на доске, которая начинает двигаться с самого начала игры:
override func update(_ currentTime: TimeInterval) { if (currTime == nil) { currTime = Date() } if (NSDate().timeIntervalSince(currTime) > 0.5) { shuffle() currTime = Date() } }
Как Примечание, обновление функции(_ currentTime: TimeInterval)вызывается автоматически до тех пор, пока сцена не была приостановлена и представлена.
После того как игрок запускает "GameOver", они перемещаются segue в GameOverViewController. Здесь появляется всплывающее окно с кнопкой перезапуска игры. Я использую глобальную переменную для ссылки обратно на исходный GameViewController из GameOverViewController:
var gameViewController: GameViewController = GameViewController()
При обновлении игры я вызываю следующий метод:
func setUpLevel() { super.viewDidLoad() // Configure the view. print("Going to sul") let skView = self.view as! SKView // Create and configure the scene. scene = GameScene(size: skView.bounds.size) scene.scaleMode = .aspectFill scene.gameViewController = self // Load the level. level = Level(filename: "Level_1", scene: scene) scene.level = level level.viewController = self scene.addTiles() //Sync the starting score with the game. updateLabels() // Present the scene. skView.presentScene(scene) // Start the game. beginGame() }
Проблема в том, что когда я возвращаюсь к GameViewController, мой метод обновления больше не работает, хотя я могу контролировать свою часть.
Что я могу сделать, чтобы "перезапустить" свой метод обновления, чтобы он работал при обновлении игры?
Имеет ли это какое-то отношение к тому, как я создал новый объект viewController?
Вот мой метод gameOver (), который вызывает переход к всплывающему окну GameOverViewController.
func gameOver() { let gameOverVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "gameOverID") as! GameOverViewController self.addChildViewController(gameOverVC) gameOverVC.view.frame = self.view.frame self.view.addSubview(gameOverVC.view) gameOverVC.didMove(toParentViewController: self) }
Вот мой viewDidLoad в GameViewController для справки:
override func viewDidLoad() { super.viewDidLoad() //set global variable to proper object gameViewController = self // Configure the view. print("Going to vdl") let skView = self.view as! SKView skView.isMultipleTouchEnabled = false // Create and configure the scene. scene = GameScene(size: skView.bounds.size) scene.scaleMode = .aspectFill scene.gameViewController = self // Load the level. level = Level(filename: "Level_1", scene: scene) scene.level = level level.viewController = self scene.addTiles() //Sync the starting score with the game. updateLabels() // Present the scene. skView.presentScene(scene) // Start the game. beginGame() }
В общем, я ищу способ обновить сцену так, чтобы, когда сегмент возвращается в игру, он работает.
Спасибо, что уделили мне время.
Что я уже пробовал:
Использование метода viewWillAppear, перемещение ссылки, проверка прогрессии, чтобы убедиться, что ничего не равно нулю