Я пытаюсь создать файл SKScene, в котором мы создаем пустые узлы в местах, где будут размещены наши игроки и другие объекты. Проблема в том, что все позиции должны быть установлены в коде. Можно ли вместо этого установить позицию в файле sks? Я заметил, что в инспекторе узлов есть метка «Положение», но, похоже, это не имеет никакого эффекта.
Можете ли вы сохранить позицию узла в файле sks
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
Хорошо, но тогда я мог бы просто использовать plist, и это было бы проще, потому что у него есть редактор.
- person blackwolf123333; 21.08.2014
@blackwolf123333 - Это вопрос личных предпочтений и того, что лучше подходит для вашей задачи.
- person sangony; 21.08.2014