如何简单地将关卡数据存储为数组并再次加载?
Posted
技术标签:
【中文标题】如何简单地将关卡数据存储为数组并再次加载?【英文标题】:how can I simply store level data as an array and load it again? 【发布时间】:2020-07-28 18:16:37 【问题描述】:我承认我是新手,虽然我已经写了 1.5 年了,但有时我还是觉得自己是个初学者。
我正在尝试编写一个动作游戏,其中有一艘飞船飞过不同的关卡。 有一段时间,在 UserDefaults 中存储关卡数据就足够了,但现在我想编辑几个关卡,因此需要更广泛的方法。
所以我基本上使用与以前相同的方式来存储数据,这似乎工作正常 - 它已保存,我可以看到并阅读它。 对于存储,将数据(Int64 值)写入一个长数组,称为 LevelSave,然后写入 'savestring',最后保存为 'Level1'
var savestring : [AnyObject?]
savestring = LevelSave as [AnyObject?]
let objCArray = NSMutableArray()
objCArray.add(savestring)
objCArray.write(toFile: getFilePath(fileName: "Level1"), atomically: true)
但是,当我似乎无法超出加载数据的点时:
if let _ = FileManager.default.contents(atPath: getFilePath(fileName: "Level1"))
let arrayb = NSArray(contentsOfFile: getFilePath(fileName: "Level1"))
它以某种方式存储在我无法正确访问的 NSArray 中。我的意思是,我可以打印出整个数组,但不能访问单个元素,甚至不能访问为所需数组设置维度所需的元素数量。 我已经搜索了很多这个问题,但似乎没有人与类似的问题作斗争。 我不想对 NSArray 进行太多详细介绍,我希望这是我唯一需要它的时候。
有人知道怎么解决吗?
【问题讨论】:
好吧,既然您使用的是 Swift,您应该停止使用任何 NS 类并将它们替换为原生类型以及为什么要使用 AnyObject 数组,您知道数组的内容 (Int64) 不是吗?还有为什么是 Int64 而不是 Int? 那么你能告诉我(告诉我)如何在没有 NS 的情况下做到这一点吗? “任何对象”,因为那是我在书中找到的。我愿意接受任何建议。当然使用 Int64,因为数字很大。 评论您停止使用 NS 类的建议,我发现这些是写入文件所必需的。 您当然可以使用原生 swift 类写入文件。 【参考方案1】:好的,我做到了。一个解决方法。 我将数组转换为文本字符串,我可以在其中添加所有元素。并保存了那个字符串。 加载文件后,我将字符串转换为单独的字符串组件,然后将这些字符串数字转换为良好的旧整数,在 for-in-loop 中一一转换。 有用。 无论如何,这些非常复杂的问题的文档(尤其是来自 Apple 的文档)通常很差,以至于我发疯了,有时我正在考虑退出。 ***.com 是一个很棒的机构,谢谢。让我继续前进!
【讨论】:
请只发布问题的答案,不要发表任何个人的胡言乱语和意见。以上是关于如何简单地将关卡数据存储为数组并再次加载?的主要内容,如果未能解决你的问题,请参考以下文章
如何将所有数据存储在单个数组中,以便我可以轻松地将其作为请求发布?
如何有效地将大文件加载到 IndexedDB 存储中?我的应用程序在超过 100,000 行时崩溃
将许多 PropertyList 放入 Google App Engine 数据存储区(在 Go 中)并使用 Query.GetAll 再次加载它们