Я недавно задал вопрос о том, как использовать шаблон protocol
delegate
здесь: Как использовать шаблон протокола делегирования с SpriteKit?
И пока я получил ответ, который дал мне долгий путь, я не понимаю, как все работает, и я думаю, что это связано с тем фактом, что я не (и не могу думать) использовать один и тот же экземпляр при изменении SKView
с. Позвольте мне объяснить.
У меня есть один UIViewController и два SKScenes
. UIViewController представляет два scenes
, вращая устройство; landscape
load SKScene
1 и книжная загрузка SKScene
2, например:
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
print("TRIGGERED")
if UIDevice.current.orientation.isLandscape {
print("Landscape")
presentView(name: "GameScene")
} else {
print("Portrait")
presentView(name: "GameScene2")
}
super.viewWillTransition(to: size, with: coordinator)
}
func presentView(name: String) {
if let view = self.view as! SKView? {
if let scene = SKScene(fileNamed: name) {
scene.scaleMode = .aspectFill
view.presentScene(scene)
}
view.ignoresSiblingOrder = true
view.showsFPS = true
view.showsNodeCount = true
}
}
и в SKScene
1:
protocol MyProtocol {
func myProtocolFunc(someString: String)
}
class GameScene: SKScene{
var myDelegate: MyProtocol!
и в SKScene
2:
class GameScene2: MyProtocol {
private var label: SKLabelNode?
func myProtocolFunc(someString: String) {
label = SKLabelNode(fontNamed: "Chalkduster")
label!.text = someString
label!.position = CGPoint(x: 0, y: 0)
addChild(label!)
}
Однако SKlabel
не обновляется со значением delegate
. Как я уже сказал, я думаю, это потому, что я создаю новый экземпляр scene
при загрузке SKScene
2. И этот экземпляр не имеет delegate
. Я не уверен, как обойти это, хотя мне нужно иметь новый экземпляр SKScene
для загрузки другой сцены.