Erstellen einer SpriteKit / GameKit Bestenliste innerhalb einer bestimmten Szene

8

Ich bin Swift ziemlich neu und habe Probleme, eine Rangliste in mein Spiel zu implementieren. Ich habe gerade ein Tutorial gesehen: "Game Center Leaderboards! (Swift 2 in Xcode) ', in dem die GameCenter-Informationen alle durch die eine Ansicht der App gingen. In meinem Spiel möchte ich, dass der Benutzer das Spiel spielen kann und nur dann, wenn er sich auf einer bestimmten SKScene befindet, Zugriff auf GameCenter erhält.

Zum Beispiel werden sie auf der GameOverScene Benutzer authentifiziert und können auch ihren Highscore hochladen. Ich denke, ich vermisse auch einige der Unterschiede zwischen GameViewController (wo alle Tutorial-Logik liegt) und einer meiner vielen Szenen, die ich gemacht habe.

Hier ist mein Code, in dem ich versuche, das GKGameCenterControllerDelegate auf dem GameOverScene zu verwenden und die verschiedenen Funktionen zu erstellen, um GameCenter zu erreichen. Der Anruf wird ausgelöst, wenn der Benutzer eine bestimmte Bezeichnung in der Ansicht antippt: (Dies funktioniert eindeutig nicht, da ich versuche, auf eine Szene wie diese zuzugreifen: self.presentViewController(view!, animated:true, completion: nil)

%Vor%

Jeder Ratschlag, wie ich das machen könnte, wäre großartig, ich denke, dass ich den ganzen Szenen / View-Controller durcheinander bringen kann und es zu Problemen führt. Danke!

    
Sam 25.08.2016, 15:37
quelle

2 Antworten

11

Diese Antwort geht teilweise dahin, wo wir in den Kommentaren aufgehört haben, da Sie nicht Ihren gesamten Code gepostet haben. Ich kann nicht genau sagen, wo Ihr Hangup war, aber das habe ich zusammen mit einem separaten Leitfaden zusammengestellt ( es ist eine etwas andere Version des von Ihnen geposteten Codes):

Autor des Großteils des Codes:

Ссылка

GameViewController.swift:

%Vor%

GameScene.swift (oder die Szene, die Sie GC verwenden möchten):

%Vor%

Achten Sie besonders auf

  

29: let my_leaderboard_id = "YOUR_LEADERBOARD_ID"

Ich habe ein paar alberne ASCII-Grafiken eingefügt, um sicherzustellen, dass du es nicht verpasst. Sie müssen Ihre tatsächliche Leaderboard-ID aus dem GameCenter-Setup eingeben.

Sie müssen auch die GameCenter-Bibliothek hinzufügen und die iTunes-Verbindung herstellen, um Ihre Highscores im Popup-Fenster zu sehen.

Ich denke, Ihre anfänglichen Probleme bestanden darin, einige der Backend-Funktionen von SpriteKit und sogar iOS-Views nicht zu verstehen (was völlig in Ordnung ist, weil Apple das Einspringen erleichtert und die Dinge sehr einfach macht). Aber wie Sie sehen, können folgende Anleitungen / Tutorials schwierig sein, da Ihre Implementierung variieren wird.

Hier sind einige gute Informationen für den Anfang:

Diagramm, was jeden Frame in SK passiert:

Ihr seht also, die SKScene ist die Klasse mit all den spaßigen Dingen wie Knoten und Aktionen und dort, wo alles (wichtig für euch) passiert. Sie können diese Szenen über den Editor generieren, aber dann müssen Sie wahrscheinlich eine neue .swift-Datei erstellen (da jede Szene ihre eigene Logik haben kann).

Der Editor ist nur eine "Abkürzung", um eine Menge Dinge zu initialisieren, und ehrlich gesagt können Sie komplette Spiele mit wenig Code machen (aber Sie werden sehr schnell herausfinden, dass Sie mehr wollen )

In diesem Code, in dem Sie GameScene oder PauseScreen deklarieren (das sind im Grunde genommen nur Klassendeklarationen, die von SKScene erben), finden Sie diese Zeile schnell über etwas, das keine Szene ist:

  

override func didMoveToView(view: SKView)   .. es ruft ein SKView ... was ist das und woher kommt es?

     

(Lesen Sie hier über SKView und sehen Sie sich seine Vererbung an):

     

Ссылка

Wir finden diese SKView-Deklaration in der GameViewController -Datei (die nur eine Klasse ist). Beachten Sie, dass sie meistens den regulären iOS-Apps entspricht, da sie UIViewController erbt:

%Vor%

Wieder wird diese Methode in GameViewController.swift deklariert, was im Grunde nur so ist: class GameViewController: UIViewController

Wie steht das alles mit iOS Apps und SpriteKit? Nun, sie sind alle übereinander gestampft:

Anatomie der IOS-App:

Grundsätzlich haben Sie von rechts nach links das Fenster, das ist (korrigieren Sie wenn falsch) das AppDelegate, dann den ViewController, dann Ihre Ansicht, die all die coolen Sachen enthält (Storyboards sitzen innerhalb der View So wie SKScenes innerhalb der View .... Labels, Nodes oder Buttons sitzen, sitzen alle innerhalb ihrer jeweiligen Klassen ((die Ansicht)))

Es ist alles ein großes Sandwich der Vererbung.

Weitere Informationen finden Sie auf den Apple-Websites.

Ссылка

Ссылка

Ссылка

Ссылка

Grundsätzlich ist alles eine Klasse, die von einer Klasse geerbt wurde, die von einer Klasse geerbt wurde, und so weiter, usw. Es kann unordentlich werden. Sie können diese Vererbungen auch in Xcode sehen, indem Sie auf sie klicken, wodurch Sie zur Quelldatei springen.

Goodluck mit deinen Studien und Abenteuern in SpriteKit:)

    
Fluidity 25.08.2016, 19:09
quelle
4

Detaillierte Antwort, die immer noch in meinem Spiel als Swift 2.2 und teilweise Xcode 7.1 funktioniert, schrieb ich vor einiger Zeit. Detaillierte Antwort, aber gehen Sie einfach zum Ende. Um Ihre Frage grundsätzlich zu beantworten, würde showLeaderboard () aufgerufen werden, wann immer Sie möchten, dass sie aufgerufen wird. Stellen Sie die spezifische Funktion in die richtige SKScene-Klasse.

iTunes Connect:

1) Melden Sie sich in Ihrem iTunes Connect-Konto an. Gehen Sie zu Meine Apps und wählen Sie die App aus, für die Sie eine Rangliste erstellen möchten.

2) Gehe zu Funktionen und dann zum Game Center . Klicken Sie auf das Pluszeichen, um eine Rangliste zu erstellen. Wenn Sie eine Reihe von Bestenlisten erstellen möchten (gruppierte Ranglisten, dann gehen Sie nach rechts und klicken Sie auf "Mehr".

3) Nachdem Sie auf das Pluszeichen geklickt haben, folgen Sie den Anweisungen, welche Art von Rangliste Sie wünschen. Machen Sie zunächst eine einzelne Rangliste, wenn Sie sich nicht sicher sind. Die "Leaderboard ID", die Sie ihm zuweisen, wird in Ihrem Code als Zeichenfolge verwendet, wenn Sie darauf zugreifen. Geben Sie also etwas Nettes ein.

Jetzt in xCode:

1) Fügen Sie die GameKit.framework-Bibliothek hinzu, indem Sie das Zeichen "+" auswählen.

2) Fügen Sie die Zeichenfolge "GameKit" in Ihre info.plist

ein

3a) Fügen Sie das folgende oben auf der GameViewController.swift-Datei mit dem anderen Importcode hinzu.

%Vor%

3b) Fügen Sie die folgende Funktion innerhalb der Klasse in derselben swift-Datei hinzu.

%Vor%

4) Rufen Sie die Funktion "authenticateLocalPlayer" in der Funktion viewDidLoad () auf.

5a) Gehe nun zur GameScene.swift Datei (oder wo auch immer die Ausführung stattfinden wird). Fügen Sie auch Folgendes oben hinzu.

%Vor%

5b) Fügen Sie den folgenden Code innerhalb der Klassenfunktion hinzu.

%Vor%

In meinem Spiel habe ich eine Schaltfläche, um die Bestenlisten anzuzeigen. Rufen Sie einfach die "showLeader" -Funktion an, um die Bestenlisten anzuzeigen.

6) Sie müssen eine Funktion haben, die den Punktestand an die Bestenlisten sendet. Außerhalb der gesamten Klassendeklaration habe ich die folgende Funktion, die den Spielstand des Benutzers als Parameter akzeptiert und an die Bestenliste sendet. Wo es heißt "YOUR_LEADERBOARD_ID", hier kommt deine Leaderboard-ID, die ich bereits erwähnt habe. Wie hier abgebildet .

%Vor%

7) Dies ist die Funktion, die ich bei einem Spiel über genannt habe. Es entscheidet, ob die Punktzahl größer als die vorherige höchste Punktzahl ist, und wenn dies der Fall ist, wird es an die Bestenlisten gesendet. Dieser Code liegt ganz bei Ihnen, aber stellen Sie sicher, dass er die saveHighscore-Funktion aufruft, die die Daten an die Bestenliste sendet.

%Vor%

Beachten Sie, dass die Funktion "saveHighscore" am Ende aufgerufen wird.

8) Schließlich, in der Game-over-Funktion (oder wie Sie es auch nennen), rufen Sie die Funktion "overrideHighestScore" auf, damit überprüft werden kann, ob der Score gut genug zum Speichern ist.

Nachdem du beides gemacht hast, warte ein paar Minuten, bis die Bestenlisten mit deiner App verbunden sind (oder dass sie geladen werden). Es funktioniert bei meinem Spiel. Hoffentlich habe ich keinen Schritt vergessen. Screenshot meiner Spielranglisten , mit denen dieses Tutorial erstellt wurde.

    
Jozemite Apps 25.08.2016 19:04
quelle