在 swift 3 中保存硬币变量
saving coins variable in swift 3
我是 swift 的新手,我需要帮助来保存一个 int 变量,该变量保存用户收集的硬币并在应用程序关闭后保存它,所以这就是我所做的,我有两个场景,一个代表 startMenu,它有一个具有硬币变量的结构(所以我可以很容易地从另一个场景控制它),另一个场景是 GameScene,在 GameScene 中,每次用户与硬币节点交互时,它都会添加1 到 StarMenu 场景中的硬币变量
在我的 StartMenu 结构中
struct Variables {
static var CoinsCollected = 0
}
这是我为了保存它所做的工作
let defaults = UserDefaults.standard
defaults.set(Variables.CoinsCollected, forKey: "CoinsCollected")
defaults.synchronize()
当用户与硬币互动时,我在 GameScene 中的 didbegin 联系人中有这一行
Variables.CoinsCollected += 1
我有这一行更新硬币变量的标签节点
coinsCollectedLabel = SKLabelNode(text: "coins: \(Variables.CoinsCollected)")
一切正常,除了它没有被保存,我知道我遗漏了一些东西,我试着阅读了很多人关于同样问题的问题,但它没有用,所以如果你们中的任何一个可以帮助我,我将不胜感激
let defaults = UserDefaults.standard
...
//after Initializing Variables Instance
//get saved value
guard Variables.CoinsCollected = defaults.integer(forKey: "CoinsCollected") else {
print("Previously saved coins don't exist")
//create UserDefaults value for coins
defaults.set(Variables.CoinsCollected, forKey: "CoinsCollected")
}
我认为值得保存整个 Variables 对象,这样您以后就可以获取添加到 struct
的任何新值 - 在这种情况下,您应该序列化 Variables
对象使用(例如)
//set object
defaults.set(Variables, forKey: "Variables")
//read object
let variables: Variables = defaults.object(forKey: "Variables")
//theoretically you should now be able to get CoinsCollected value within your retrieved object~
//e.g.
print(variables.CoinsCollected)
您可以在 Variables
class 中执行此操作,这样您的硬币将始终保存在永久文件中:
class Variables {
static let userDefaults = UserDefaults.standard
struct Constants {
static let CoinsCollectedKey = "CoinsCollected"
}
static var CoinsCollected: Int {
get {
return userDefaults.integer(forKey: self.Constants.CoinsCollectedKey)
}
set(value) {
userDefaults.setValue(value, forKey: self.Constants.CoinsCollectedKey)
}
}
}
我是 swift 的新手,我需要帮助来保存一个 int 变量,该变量保存用户收集的硬币并在应用程序关闭后保存它,所以这就是我所做的,我有两个场景,一个代表 startMenu,它有一个具有硬币变量的结构(所以我可以很容易地从另一个场景控制它),另一个场景是 GameScene,在 GameScene 中,每次用户与硬币节点交互时,它都会添加1 到 StarMenu 场景中的硬币变量
在我的 StartMenu 结构中
struct Variables {
static var CoinsCollected = 0
}
这是我为了保存它所做的工作
let defaults = UserDefaults.standard
defaults.set(Variables.CoinsCollected, forKey: "CoinsCollected")
defaults.synchronize()
当用户与硬币互动时,我在 GameScene 中的 didbegin 联系人中有这一行
Variables.CoinsCollected += 1
我有这一行更新硬币变量的标签节点
coinsCollectedLabel = SKLabelNode(text: "coins: \(Variables.CoinsCollected)")
一切正常,除了它没有被保存,我知道我遗漏了一些东西,我试着阅读了很多人关于同样问题的问题,但它没有用,所以如果你们中的任何一个可以帮助我,我将不胜感激
let defaults = UserDefaults.standard
...
//after Initializing Variables Instance
//get saved value
guard Variables.CoinsCollected = defaults.integer(forKey: "CoinsCollected") else {
print("Previously saved coins don't exist")
//create UserDefaults value for coins
defaults.set(Variables.CoinsCollected, forKey: "CoinsCollected")
}
我认为值得保存整个 Variables 对象,这样您以后就可以获取添加到 struct
的任何新值 - 在这种情况下,您应该序列化 Variables
对象使用(例如)
//set object
defaults.set(Variables, forKey: "Variables")
//read object
let variables: Variables = defaults.object(forKey: "Variables")
//theoretically you should now be able to get CoinsCollected value within your retrieved object~
//e.g.
print(variables.CoinsCollected)
您可以在 Variables
class 中执行此操作,这样您的硬币将始终保存在永久文件中:
class Variables {
static let userDefaults = UserDefaults.standard
struct Constants {
static let CoinsCollectedKey = "CoinsCollected"
}
static var CoinsCollected: Int {
get {
return userDefaults.integer(forKey: self.Constants.CoinsCollectedKey)
}
set(value) {
userDefaults.setValue(value, forKey: self.Constants.CoinsCollectedKey)
}
}
}