Можете ли вы сохранить позицию узла в файле sks

Я пытаюсь создать файл SKScene, в котором мы создаем пустые узлы в местах, где будут размещены наши игроки и другие объекты. Проблема в том, что все позиции должны быть установлены в коде. Можно ли вместо этого установить позицию в файле sks? Я заметил, что в инспекторе узлов есть метка «Положение», но, похоже, это не имеет никакого эффекта.


person blackwolf123333    schedule 21.08.2014    source источник
comment
Какую версию XCode вы используете?   -  person ZeMoon    schedule 21.08.2014
comment
Я использую Xcode 6 бета 6   -  person blackwolf123333    schedule 21.08.2014
comment
Почему бы не использовать NSUserDefaults?   -  person sangony    schedule 21.08.2014
comment
@sangony Ну, я работаю со SpriteKit, а не с обычным конструктором интерфейсов. Во-вторых, он не интегрирован в редактор сцен, поэтому мне пришлось бы редактировать его вручную.   -  person blackwolf123333    schedule 21.08.2014
comment
Вы можете легко использовать NSUserDefaults в SpriteKit, и его кодирование займет всего пару строк.   -  person sangony    schedule 21.08.2014
comment
@sangony Я попробую, и если у вас будет время, не могли бы вы написать немного более длинный ответ для других людей? Отчитаюсь, когда заработаю :)   -  person blackwolf123333    schedule 21.08.2014
comment
@sangony, не могли бы вы привести пример, потому что я понятия не имею, как заставить это работать. Кроме того, можно ли повторно использовать файлы .sks, которые у меня уже есть, или мне нужно делать это только с NSUserDefaults?   -  person blackwolf123333    schedule 21.08.2014


Ответы (1)


Запишите данные с помощью NSUserDefaults:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

NSDictionary *nodeDict = [[NSDictionary alloc] initWithObjectsAndKeys:
                          [NSNumber numberWithFloat:myNode.position.x], @"posX",
                          [NSNumber numberWithFloat:myNode.position.y], @"posY",
                          nil];

[defaults setObject: nodeDict forKey:@"nodeDict"];

[defaults synchronize];

Чтение данных с помощью NSUserDefaults:

NSDictionary * nodeDict = [[NSUserDefaults standardUserDefaults] objectForKey:@"nodeDict"];

float posX = [[nodeDict objectForKey:@"posX"] floatValue];
float posY = [[nodeDict objectForKey:@"posY"] floatValue];

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

Имейте в виду, что вы можете хранить в словаре только объекты, а не примитивы, такие как int, float и т. д. Вот почему вы должны преобразовать их в NSNumber.

person sangony    schedule 21.08.2014
comment
Хорошо, но тогда я мог бы просто использовать plist, и это было бы проще, потому что у него есть редактор. - person blackwolf123333; 21.08.2014
comment
@blackwolf123333 - Это вопрос личных предпочтений и того, что лучше подходит для вашей задачи. - person sangony; 21.08.2014