2016-07-20 1 views
1

У меня есть 2 SKScene s. На первой сцене есть две кнопки: кнопка игрока и кнопка игрока. Вторая сцена имеет 2 скрытых изображения: изображение игрока-мужчины и изображения игроков-женщин.Как запросить данные из другой сцены в SpriteKit

Если мужчина игрок выбран в Scene1, я хочу, чтобы мужчина игрок изображение видимым в Scene2, но у меня возникают проблемы с передачей данных между SKScene с. Я использую Sprite Kit и программирование в Swift. Пожалуйста, порекомендуйте.

Вот что я пытался до сих пор:

// 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

Вы пробовали что-нибудь еще? Если да, отправьте соответствующий код. Нет никакого упоминания о том, какой язык вы используете. Objective-C? Swift? – jsondwyer

+0

Я отредактировал код для лучшего понимания, и это для комплекта спрайтов. Сцена 2 представлена, но игрок не появляется на сцене 2. – viktorm

ответ

1

Существует несколько способов сделать это. Вот один пример, который использует NSUserDefaults. Одной из причин, по которой это хороший вариант, является то, что выбор будет сохраняться даже после закрытия приложения и может быть перезагружен при следующем открытии приложения.

Для сохранения выбора, используйте следующий код:

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 
    } 

Значение теперь сохраняется в локальном хранилище. Если вам необходимо получить доступ к выбору в других ваших сценах, возьмите значение из NSUserDefaults:

Так Scene2 мощь ищет что-то вроде этого:

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

В сцене 2 кода:

var playerSelected: Scene1() 

Создает новый экземпляр класса сцены 1, он не обеспечивает обратную ссылку к вашей оригинальной сцене 1. Чтобы получить доступ к свойствам сцены 1, вам необходимо передать ссылку на нее из сцены 2.

+0

, пожалуйста, сообщите, что представляет собой строка кода для передачи справки из сцены 2 в сцену 1. спасибо – viktorm

+0

@viktorm Это будет сильно зависеть от общей структуры вашего кода , Вероятно, сцена 2 должна быть представлена ​​не со сцены 1, а скорее из контроллера уровня более высокого уровня. На самом деле я бы поставил под вопрос, почему у вас есть две сцены вообще - почему бы вам не выбрать ваш плеер в другом месте на одной сцене? Я думаю, вам нужно вернуться к тому, как структурирован ваш код и как объекты взаимодействуют друг с другом, иначе вы собираетесь связать себя круговыми ссылками. –