Spritekit 场景存档
Spritekit Scene Archiving
SpriteKit programming guide 包含这个有用的小花絮:
Store a game level as an archive of a scene node. This archive includes the scene, all of its descendants in the node tree, and all of their connected physics bodies, joints, and actions.
但它没有任何关于在何处或如何存储此存档的信息。这是我当前的代码,但它不起作用:
// 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。我将取消存档代码添加到上面的块中。
我最终使用 unarchiveTopLevelObjectWithData 来生成一个我可以捕捉到的错误。
原来 NSexception 是由于尝试使用不是解码对象的东西来解码可选的。
SpriteKit programming guide 包含这个有用的小花絮:
Store a game level as an archive of a scene node. This archive includes the scene, all of its descendants in the node tree, and all of their connected physics bodies, joints, and actions.
但它没有任何关于在何处或如何存储此存档的信息。这是我当前的代码,但它不起作用:
// 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。我将取消存档代码添加到上面的块中。
我最终使用 unarchiveTopLevelObjectWithData 来生成一个我可以捕捉到的错误。
原来 NSexception 是由于尝试使用不是解码对象的东西来解码可选的。