So rufen Sie eine Methode von ViewController in GameScene auf

7

Ich habe eine Methode, die in meinem viewController einen benutzerdefinierten Übergang hat, der folgendermaßen aussieht:

%Vor%

Ich rufe die Methode so in GameScene.swift auf:

%Vor%

Ich habe den Namen des Segments überprüft und es ist korrekt. Wann immer ich das in meiner GameScene.swift Datei anrufe, bekomme ich die SIGABRT Nachricht und ich weiß nicht warum. Ich versuchte, die Funktion mit nur einer println () Nachricht aufzurufen und es funktionierte.

Jeder Hinweis, warum dies auftritt und wie ich die Methode in der GameScene.swift-Datei erfolgreich aufrufen kann, wäre sehr zu begrüßen.

Danke!

P.S. Hier ist das Absturzprotokoll:

%Vor%

es sagt, es gibt keine segue id. mit "GameEnd", aber es gibt einen und es funktioniert, wenn auf dem Viewcontroller

verwendet     
Jonathan Hanna 28.01.2015, 04:07
quelle

4 Antworten

24

Der Grund dafür ist, dass Sie eine neue Instanz von GameViewController erstellen und dann gameOver aufrufen. Was Sie wirklich tun möchten, ist Ihre bestehende GameViewController

zu referenzieren

gibt ein paar Möglichkeiten, dies zu tun, ich gebe dir ein Beispiel.

Fügen Sie Ihrer GameScene-Klasse eine viewController-Eigenschaft hinzu

%Vor%

in Ihrer GameViewController-Datei

%Vor%

Jetzt haben wir einen Verweis auf viewController, wir können es in unserer GameScene-Klasse verwenden

%Vor%     
hamobi 28.01.2015, 07:46
quelle
5

Ich habe das create protocol gemacht, Ich habe 3 Spielszenen (GameScene, GamePlayScene, GameEndScene) und einen Gamecontroller (GameViewController)

Erstellen Sie zuerst gameProtocol

%Vor%

implementieren Protokoll in GameViewController

%Vor%

Setze die Delegate-Eigenschaft in die GameScene-Klasse

%Vor%

und setze das Protokoll auch in GamePlayScene

%Vor%

und zuletzt, setzen Sie die Eigenschaft delegate und rufen Sie die gameOver-Funktion

auf %Vor%

Ich hoffe, dass Arbeit und kann Ihnen helfen

Mit freundlichen Grüßen, Donny

    
donny 16.06.2015 07:20
quelle
1

Ich weiß nicht, ob das noch relevant ist, aber ich möchte Ihnen eine Lösung für dieses Problem vorstellen.

Wie Sie hier sehen können Swift iOS: Führen Sie eine Segue von einer Instanz in einem ViewController zu einem anderen ViewController Ich hatte vor einiger Zeit genau das gleiche Problem, das ich mit Protokolle beheben konnte.

Das Problem ist, dass Sie "performSegueWithIdentifier (" GameOver ", sender: nil)" nur in Ihrer GameViewController-Klasse aufrufen können, aber Sie möchten es von Ihrer Gamescene aus ausführen.

Dafür erstellst du in deinem GameScene ein Protokoll wie dieses:

%Vor%

und eine Variable für den Delegierten in der Gamescene:

%Vor%

In Ihrer GameViewController-Klasse müssen Sie den Delegaten in der Klassendefinition hinzufügen

%Vor%

und setze den Delegaten der Szene in der viewDidLoad-Funktion deines GameViewControllers auf self:

%Vor%

Der letzte Schritt besteht darin, die Funktion gameOverDelegateFunc () in Ihrem GameViewController zu implementieren:

%Vor%

Das ist alles, was Sie tun müssen.

Wann immer du diese Sequenz in deinem GameScene durchführen willst, musst du die Funktion einfach über den Delegaten aufrufen:

%Vor%

Ich hoffe, dass alles klar ist und ich helfen konnte,

Grüße, Phil

    
Phil_G 28.05.2015 21:31
quelle
0

Ich habe nicht genug Rep, um auf Ihren letzten Kommentar zu antworten, aber wenn Sie diesen Fehler immer noch erhalten, liegt das daran, dass Sie diesem Segment noch keinen Namen (oder Bezeichner) in Interface Builder gegeben haben!

Wenn Sie mit der Maus klicken und ziehen, um Übergänge zwischen Ansichtscontrollern im Interface Builder zu zeichnen, können Sie jeden Übergang anhand des Kreissymbols auswählen, das in der Mitte der Überschriftszeilen angezeigt wird. Dann, wenn Sie performSegueWithIdentifier aufrufen, sollte es funktionieren!

So könnte das kreisförmige Symbol aussehen, abhängig vom Typ des Abschnitts:

Wenn Sie ein wenig unsicher sind, schauen Sie sich dieses Tutorial oder dieser !

    
sahandnayebaziz 10.02.2015 00:47
quelle