2016-12-29 9 views
1

SpriteKit programming guide содержит этот полезный маленький лакомый:Spritekit Scene Архивирование

магазин уровень игры как архив узла сцены. Этот архив включает в себя сцену, все ее потомки в дереве узлов и все связанные с ними физические тела, суставы и действия.

Но он не имеет информации о том, где и как сохранить этот архив. Это мой текущий код, если он не работает:

// Save Data 
    let fileManager = FileManager.default 
    let URL = fileManager.urls(for: .applicationSupportDirectory, in: .userDomainMask)[0] 
    let path = URL.appendingPathComponent("stage1.dat") 

    if NSKeyedArchiver.archiveRootObject(stage1, toFile: path.path) != false { 
     print("stage saved") 
    } 
    else { 
     print("save failed") 
    } 

    // Load Data 
    var data = Data() 
    do{ 
     data = try Data(contentsOf: path) 
    } 
    catch{ 
     print(error) 
    } 


    let stage = NSKeyedUnarchiver.unarchiveObject(with: data) as? GameScene 

редактировать: Оказывается, у меня нет разрешения на запись локального домена. упс. Я переключил его в пользовательский домен, и теперь запись работает. Тем не менее, попытка разобрать тот же файл теперь бросает NSException. Я добавил код для удаления в блок выше.

+0

Это может быть то, что вы ищете http://battleofbrothers.com/sirryan/saving-game-data-in-spritekit – 0x141E

ответ

1

В результате я использовал unarchiveTopLevelObjectWithData, чтобы создать ошибку, которую я мог бы поймать.

Выключает NSexception из-за попытки декодирования необязательного использования чего-то, что не является декодированным объектом.

This question pretty much sums it up.