SpriteKit: Übergeben von Daten zwischen Szenen

7

Ich stehe fest und versuche, Daten zwischen den Szenen "SKScene" in SpriteKit zu übertragen. Zum Beispiel würde ich gerne die Punkte von Level A nach Level B weitergeben.

Vielleicht archiviert die Lösung, aber ich möchte etwas einfacheres implementieren, wie wir es mit View-Controllern verwenden.

Jeder Hinweis in dieser Hinsicht wird sehr geschätzt werden.

    
Alfonso 19.09.2013, 02:48
quelle

6 Antworten

15

Wenn Sie die Partitur in vielen verschiedenen Szenen abspielen möchten, sollten Sie sie in NSUserDefaults oder einem zugänglichen Speichermechanismus speichern. Wenn Sie jedoch Daten zwischen SpriteKit-Objekten übergeben möchten, verfügt jedes SKNode (einschließlich SKScene ) über eine Wörterbucheigenschaft namens userData , die Sie für beliebige Zwecke verwenden können. Hier ist ein Beispiel, wie Sie die Punkte zwischen den Szenen weitergeben können:

%Vor%     
doctorBroctor 20.09.2013, 19:28
quelle
7

Speichern Sie das Ergebnis in Ihrer View-Controller-Instanz, oder untergliedern Sie das SKView und speichern Sie es dort. Dadurch wird jedes Objekt für die Lebensdauer der Ansicht beibehalten.

Wenn Sie möchten, dass die Ergebnisse zwischen Neustarts der App erhalten bleiben, verwenden Sie NSUserDefaults .

Kobold-Kit macht solche Sachen einfach und ohne benutzerdefinierte Unterklassen. Die Ansicht hat (und jeder Knoten kann) ein KKModel -Objekt, das ein Schlüssel / Wert-Speicher für beide integralen Typen (float, int usw. über KKMutableNumber ) und beliebige Objekte ist.

So können Sie persistent sein und auf Ihr Highscores-Objekt von jedem Knoten aus zugreifen , indem Sie es an die View binden:

%Vor%

Die Eigenschaft kkView ist eine Abkürzung für das Schreiben von (KKView*)self.view .

Es gibt absolut keine Notwendigkeit, Singletons für Objekte zu verwenden oder zu nutzen, deren Lebensdauer entweder an die Szene oder an die Ansicht gebunden ist. Sie gehören entweder zur Szene oder zur Ansicht, Punkt.

    
LearnCocos2D 20.09.2013 08:37
quelle
4

Dieser Ansatz hat für mich funktioniert und ich denke, dass es richtig ist. Bis jetzt ist dies der einfachste und schnellste Weg, um Daten zwischen Szenen zu übertragen, die ich gefunden habe.

1. Grundlegende Informationen zu userData:

1.1. Halten Sie den Apfel "Befehlstaste" gedrückt und drücken Sie die linke Maustaste (in Xcode) auf die Zeichenfolge "userData" (zum Beispiel. "Self. userData ;"). Sie erhalten folgende Informationen:

%Vor%

1.2. Rufen Sie die Apple-Dokumentation auf : userData

1.3 userData ist ein NSMutableDictionary, das im Grunde ein spezielles Array ist. Neben dem Wert enthält es einen Schlüssel, der an den Wert gebunden ist. Mit diesem Schlüssel können Sie Werte finden. Dies könnte auch hilfreich sein: apple docs: NSMuttableDictionary

2. Die Lösung:

2.1. firstScene

%Vor%

Hier verweise ich auf die userData der zweiten Szene, indem ich ein Objekt hinzufüge, das meine Punktzahl ist. Zu Testzwecken ist es nur 6. Ich werde meine Score-Instanz-Variable hinzufügen. Sie können hinzufügen, was immer Sie wollen, da es Objekte vom Typ "id" akzeptiert. Der Schlüssel ist wichtig. Sie werden es in secondScene.m verwenden, um auf den Objektwert seit zu zugreifen. Stellen Sie sicher, dass Sie es nicht falsch eingeben.

%Vor%

* WBMGameEndsScene ist meine zweite Szene. Ich habe es in Xcode mit "Datei - Neue Datei ..." als: SKScene erstellt. Es enthält die userData, die später gezeigt werden.

2.2. secondScene

%Vor%

Diese nächsten Codezeilen prüfen, ob der Wert korrekt hinzugefügt wurde:

%Vor%

Konsolenausgabe ist:

%Vor%

Wenn ich etwas falsch gemacht habe, bitte korrigieren Sie mich :). Spezifikationen: iOS 7.0, Xcode Version 5.1 (5B130a), OS X 10.9.2

    
MB_iOSDeveloper 12.03.2014 15:23
quelle
0

Wo / wie gehen Sie zwischen den Szenen um? Wenn du nur den Code zeigen könntest, mit dem du deine neue Szene erstellst, würde das helfen. Ich mag den Punkt der Frage vermissen, aber wenn Sie einen 'Szenemanager' / Navigator von irgendeiner Art haben, um dies zu tun, dann speichern Sie einfach die Partitur in einer lokalen Var vorübergehend und übergeben Sie diese in Ihre neue Szene.

    
Skill M2 26.09.2013 11:49
quelle
0

Die Apple-Dokumentation besagt, dass userData die Methode zum Speichern knotenspezifischer Daten hier in Sprite Kit Best Practices

  

Verwenden Sie die userData -Eigenschaft auf Knoten zum Speichern von spielspezifischen Daten, insbesondere wenn Sie keine eigenen Unterklassen implementieren.

Daher würde ich @ doctorBroctors Antwort als die richtige für die native Verwendung von Sprite Kit akzeptieren.

Sie sollten jedoch daran denken, userData für den Zielknoten zu initialisieren, bevor Sie einen Wert festlegen, wie @ LearnCocos2d in diesem angibt Antworten. Sie können dies innerhalb der initWithSize: Methode der SKScene-Unterklasse tun, in die Sie gerade übergehen möchten.

    
mass 13.11.2013 08:47
quelle
0
%Vor%     
Bobby 10.03.2015 20:41
quelle

Tags und Links