gpt4 book ai didi

ios - 如何存储电平数据

转载 作者:搜寻专家 更新时间:2023-11-01 06:25:08 28 4
gpt4 key购买 nike

我正在使用 SpriteKit 创建游戏,但我没有在关卡前使用 sks 文件。在发布游戏之前,我不会详细介绍游戏的理念,但基本上每个关卡都是根据一些数字自动生成的。所以本质上定义一个级别的是这些数字,我想知道我可以在哪里存储这些数字。如果我使用 sks 文件,每个级别只有一个文件,但在这种情况下,我应该将它们按级别数组排序吗?数组应该在级别选择 viewcontroller 中吗?它应该在单例类中吗?基本上什么是存储这些值的好方法?

最佳答案

所以关卡是在运行时自动生成的?

您可以使用关卡数组,或每个关卡一个文件。我只会将它们写入应用程序文档目录中的一个或多个文件。 (我可能会为每个关卡使用一个文件,只是为了保持简单,这样您就可以轻松添加更多关卡,而无需每次都重写整个游戏布局文件。)

如果您使用标量类型、数组和字典(属性列表对象)构建关卡结构,那么您可以使用 NSArray 将“对象图”写入属性列表>NSDictionary 方法 write(to:)

或者,您可以使关卡对象符合 Codable 协议(protocol),将其转换为 JSON,并将 JSON 数据保存到文件中。 Codable 协议(protocol)易于使用,Apple 对其进行了详细记录,在线教程也很多。

编辑

请注意,您还可以使用 Codable 协议(protocol)将数据写入属性列表。就像 JSONEncoderJSONDecoder 类一样,还有 PropertyListEncoderPropertyListDecoder 类可以将你的对象图转换回来,第四,属性(property) list 格式。 (二进制属性列表比 JSON 更紧凑,读写速度更快。)

下面是一个示例 playground,它定义了一个自定义结构 FooStruct,使其成为 Codable,然后使用 PropertyListEncoder 将数据写入 playground 的共享数据目录(如果要测试此代码,则必须进行设置)

import UIKit
import PlaygroundSupport


struct FooStruct: Codable {
let aString: String
let anotherString: String
let anInt: Int
}

let fooArray: [FooStruct] = [FooStruct(aString: "Foo 1",
anotherString: "String 1", anInt: 4),
FooStruct(aString: "Foo 2",
anotherString: "String 2", anInt: 7)
]

let encoder = PropertyListEncoder()
encoder.outputFormat = .binary

do {
print(fooArray)
let data = try encoder.encode(fooArray)
let plistURL = playgroundSharedDataDirectory.appendingPathComponent("property list.plist")
try data.write(to: plistURL)
print("Data written to \(plistURL.path)")
} catch {
print (error)
}

关于ios - 如何存储电平数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57137405/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com