Используйте логическое значение из другой сцены в SpriteKit — Swift

Я пытаюсь использовать переменную из моего файла GameScene.swift в моем файле GameViewController.swift, чтобы правильно рассчитать время для моих межстраничных объявлений. Это логическое значение, которое определяет, мертв мой игрок или нет.

  var died = Bool()

Это все, что я сделал для создания переменной в GameScene.

Когда die == true в моей GameScene, я хочу отправить это в свой GameViewController, а затем показать промежуточную рекламу. Мне действительно просто нужно знать, как передать логическое значение между сценами. Заранее спасибо за вашу помощь.


person Tiptech    schedule 04.07.2016    source источник


Ответы (2)


Вы можете выполнить следующие шаги.

Сделайте это в GameScene:

protocol PlayerDeadDelegate {
    func didPlayerDeath(player:SKSpriteNode)
}

class GameScene: SKScene {
    var playerDeadDelegate:PlayerDeadDelegate?
    ...
    // during your game flow the player dead and you do:
    playerDeadDelegate.didPlayerDeath(player)
    ...
}

В GameViewController вы делаете:

class GameViewController: UIViewController,PlayerDeadDelegate {
     override func viewDidLoad() {
        super.viewDidLoad()
        if let scene = GameScene(fileNamed:"GameScene") {
              ...
              scene.playerDeadDelegate = self
        }
     }

     func didPlayerDeath(player:SKSpriteNode) {
         print("GameViewController: the player is dead now!!!")
         // do whatever you want with the property player..
     }
}
person Alessandro Ornano    schedule 04.07.2016

Ваша GameScene должна иметь ссылочный объект в качестве делегата (например, соответствующий протоколу GameSceneDelegate), который фактически указывает на объект GameViewController. Затем, когда dead становится истинным, информируйте свой объект делегата (объект GameViewController) об этом событии с помощью метода делегата и реализуйте этот метод, соблюдая указанный выше протокол в своем классе GameViewController.

person Tushar    schedule 04.07.2016
comment
Я начинающий программист. Не могли бы вы привести пример в коде? Или это займет слишком много времени? - person Tiptech; 04.07.2016