Member 13665123 Ответов: 0

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, перемещение ссылки, проверка прогрессии, чтобы убедиться, что ничего не равно нулю

0 Ответов