2016-07-20 6 views
1

Ich habe 2 SKScene s. Die erste Szene hat 2 Knöpfe: einen männlichen Spielerknopf und einen weiblichen Spielerknopf. Die zweite Szene hat 2 versteckte Bilder: ein männliches Spielerbild und ein weibliches Spielerbild.So fordern Sie Daten von einer anderen Szene in SpriteKit an

Wenn männliche Spieler in Scene1 ausgewählt ist, möchte ich das männliche Spieler-Bild sichtbar in Scene2 machen, aber ich habe Probleme, die Daten zwischen SKScene s vorbei. Ich benutze Sprite Kit und Programmierung in Swift. Bitte beraten. Hier

ist das, was ich bisher versucht:

// Scene1: 

import SpriteKit 

class Scene1: SKScene { 

var malePlayer = SKSpriteNode() 
var femalePlayer = SKSpriteNode() 

var maleSelect = false 
var femaleSelect = false 

// in touches began.. 
if self.nodeAtPoint(location) == self.malePlayer { 
      maleSelect = true 
// then i present scene2 

} else if self.nodeAtPoint(location) == self.femalePlayer { 
      femaleSelect = true 
//then i present scene2 



// in scene 2: 
class Scene2: SKScene { 
var playerSelected: Scene1() 
// did move to view 
var boy = SKSpriteNode() 
var girl = SKSpriteNode() 

if self.playerSelected.maleSelect == true { 
self.addChild(boy) 
} else if self.playerSelected.femaleSelect == true { 
self.addChild(girl) 
} 
+0

Haben Sie etwas noch versucht? Wenn ja, bitte posten Sie den entsprechenden Code. Es wird nicht erwähnt, welche Sprache Sie verwenden. Ziel c? Schnell? – jsondwyer

+0

ich bearbeitete Code für besseres Verständnis und es ist für Sprite-Kit. Szene 2 wird angezeigt, aber Player erscheint nicht in Szene 2. – viktorm

Antwort

1

Es gibt mehrere Möglichkeiten, dies zu tun. Hier ist ein Beispiel, das NSUserDefaults verwendet. Ein Grund dafür ist, dass die Auswahl auch nach dem Schließen der App erhalten bleibt und beim nächsten Öffnen der App erneut geladen werden kann.

Um die Auswahl zu speichern, verwenden Sie den folgenden Code:

if self.nodeAtPoint(location) == self.malePlayer { 

     //save the selection in NSUserDefaults 
     NSUserDefaults.standardUserDefaults().setBool(true, forKey:"maleSelected") 

     //present next scene 

    } else if self.nodeAtPoint(location) == self.femalePlayer { 

     //save the selection 
     NSUserDefaults.standardUserDefaults().setBool(false, forKey:"maleSelected") 

     //present next scene 
    } 

Der Wert nun im lokalen Speicher gespeichert wird. Wenn Sie die Auswahl in den anderen Szenen zugreifen müssen, greifen Sie den Wert von NSUserDefaults:

So Scene2 könnte so etwas wie folgt aussehen:

class Scene2: SKScene { 
var playerSelected: Scene1() 

// did move to view 
var boy = SKSpriteNode() 
var girl = SKSpriteNode() 

//grab the selection value 
let maleSelected = NSUserDefaults.standardUserDefaults().boolForKey("maleSelected") 

if maleSelected == true { 
self.addChild(boy) 
} else { 
self.addChild(girl) 
} 
} 
0

In Szene 2 der Code:

var playerSelected: Scene1() 

Erstellt eine neue Instanz der Szene 1 Klasse, es bietet keine Verbindung zurück zu Ihrer Originalszene 1. Um auf die Eigenschaften von Szene 1 zuzugreifen, müssen Sie einen Verweis darauf von Szene 2 übergeben.

+0

Bitte geben Sie an, welche Codezeile eine Referenz von Szene 2 an Szene 1 weitergeben soll. Danke – viktorm

+0

@viktorm Das hängt stark von der Gesamtstruktur Ihres Codes ab . Szene 2 sollte wahrscheinlich nicht von Szene 1 präsentiert werden, sondern von einem übergeordneten Ansichts-Controller. In der Tat würde ich fragen, warum Sie zwei Szenen überhaupt haben - warum nicht Ihren Sprites an einem anderen Ort in der gleichen Szene wählen? Ich denke, Sie müssen noch einmal überprüfen, wie Ihr Code strukturiert ist und wie Objekte miteinander interagieren, sonst binden Sie sich in Zirkelverweise. –

Verwandte Themen