Spitekit: Warum ist mein Koordinatorwert NIL, wenn er versucht, von meinem Gamescene zurück zu meiner Heimatszene zu navIOS

Programmierung für iOS
Anonymous
 Spitekit: Warum ist mein Koordinatorwert NIL, wenn er versucht, von meinem Gamescene zurück zu meiner Heimatszene zu nav

Post by Anonymous »

Ich bin neu bei iOS/Swift/Spritekit und bin dabei, ein einfaches Kartenspiel im Solitaire-Stil von Android zu migrieren. Gegenwärtig habe ich zwei Szenen: < /p>

Launcherscene, die Homepage für die App, und < /li>
Gamescene, wobei die Karten verhandelt werden und das Spiel mit dem Spiel. Das Label wird abgebildet, die Newgametapt -Methode wird im GameViewController und in den neuen Gamescene -Ladungen aufgerufen. Das Spiel spielt normalerweise zu diesem Zeitpunkt. Wenn das Spiel vorbei ist, möchte ich dem Benutzer die Möglichkeit geben, zum Launcherscene zurückzukehren. Deshalb habe ich das Koordinatorprotokoll in Gamescene implementiert. Wenn das "Home" -Label eingeschaltet ist, sollte der Benutzer mit dem Nutzungs -Koordinator. Nil. < /p>
Hier sind die Ausschnitte für jedes Element der Implementierung. Protokollerklärung in Gamescene: < /p>
import SpriteKit

protocol GameSceneCoordinator: AnyObject {
func goHomeTextTapped(_ scene: GameScene)
}

class GameScene: SKScene {

weak var coordinator: (GameSceneCoordinator)?

var gameDeck = CardDeck()
...
< /code>
Koordinator, das von der TouchesBegan -Methode aufgerufen wurde (Wert des Koordinators ist nil, wenn ich diesen Anruf breche: < /p>
override func touchesBegan(_ touches: Set, with event: UIEvent?) {
let touch:UITouch = touches.first! as UITouch
let positionInScene = touch.location(in: self)
let touchedNodes = nodes(at: positionInScene)

...

if ((touchedNodes.contains(homeLabel)) && gameComplete) {
coordinator?.goHomeTextTapped(self)

}
}
< /code>
GameViewController -Erweiterung. Dieser Code wird nie ausgeführt, da der Controller im obigen Snippet nil ist: < /p>
extension GameViewController: GameSceneCoordinator {
func goHomeTextTapped(_ scene: GameScene) {
guard let view = self.view as? SKView else { return }
let scene = LauncherScene(size:CGSize(width: 768, height: 1024))
scene.coordinator = self
scene.scaleMode = .aspectFill
view.presentScene(scene)
}

}
< /code>
launcherscene Gamescene < /p>
Ich habe dieses Beispiel auf Medium gefolgt, und in der Launcher-> GamesCene-Richtung hat dieses Koordinatormuster perfekt funktioniert. Ich habe meinen Code hier mehrmals gegen das Beispiel überprüft und kann keinen Unterschied finden, der erklären sollte, warum der Koordinator nicht von der Gamescene zurück zum Launcherscene

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post