从两个单独的 SKScene 中检索并立即更新高分
Posted
技术标签:
【中文标题】从两个单独的 SKScene 中检索并立即更新高分【英文标题】:Retrieve and Instantly Update High Score From Two Separate SKScene's 【发布时间】:2017-10-25 23:11:55 【问题描述】:在我的 GameScene 中,我在游戏结束时通过 UserDefaults 保存了一个分数。下面是我保存分数的 GameScene 代码。
var totalPoints = 0
didSet
score.text = " \(totalPoints)"
UserDefaults.standard.set(totalPoints, forKey: "scoreDefaults")
一旦玩家失去所有生命,游戏就会让您返回主菜单场景。在这个场景中,如果玩家最后的分数高于他们之前的高分,我想立即检索并更新主菜单场景中的高分数字。但由于某种原因,它只是不断更新用户在游戏结束时获得的每个分数,无论它是高于还是低于上一个高分。我究竟做错了什么?下面是我的主菜单场景。当我打印“newScore”和“getScore”时,我确实看到了正确的值,但是当涉及到在需要时更新高分时,我的代码肯定是错误的。
let getScore:Int = UserDefaults.standard.integer(forKey: "scoreDefaults")
override func didMove(to view: SKView)
if ((UserDefaults.standard.integer(forKey: "updateHighScoreDefaults")) >= 0)
highScore.text = " \(newScore)"
else
print("I don't know")
if (getScore > newScore)
print("New High Score!")
newScore = getScore
//print(newScore)
UserDefaults.standard.set(newScore, forKey: "updateHighScoreDefaults")
highScore.text = " \(newScore)"
else
print("Not a high score")
UserDefaults.standard.set(newScore, forKey: "updateHighScoreDefaults")
highScore.text = " \(newScore)"
【问题讨论】:
【参考方案1】:你的钥匙错了scoreDefaults
vs updateHighScoreDefaults
Pick 1
另外,getScore
只被调用一次,改为将其设为计算属性
var getScore:Int return UserDefaults.standard.integer(forKey: "updateHighScoreDefaults")
override func didMove(to view: SKView)
if (getScore > newScore)
print("New High Score!")
newScore = getScore
//print(newScore)
UserDefaults.standard.set(newScore, forKey: "updateHighScoreDefaults")
highScore.text = " \(newScore)"
else
print("Not a high score")
UserDefaults.standard.set(newScore, forKey: "updateHighScoreDefaults")
highScore.text = " \(newScore)"
UserDefaults.syncronize()
【讨论】:
我应该将我的代码移动到更新函数,以便它立即更新高分还是 didMove 可以? 如果您想不断更新,请在didSet
或newScore
上执行此操作。我不知道你在做什么,我只是假设这是一个高分场景或什么的。
请再看看我的代码。如您所见,我有两个不同的键,因为我想通过“scoreDefaults”从 GameScene 获取 originaql 分数并想保存它(newScore,forKey:“updateHighScoreDefaults”),这样我就可以不断更新高分每次玩家打开应用程序时,通过 updateHighScoreDefaults 主菜单。希望这是有道理的!
但是你从来没有读过updateHighScoreDefaults
我不建议使用UserDefaults
作为共享数据的手段,我知道你可以做到,并不意味着这是一个好方法。 UserDefaults
应该用作将应用程序设置保持在特定状态的一种方式。我建议使用每个场景中的 userData
来获取从 GameScene 到 MenuScene 的分数,然后使用 UserDefaults
保存到设备
您不需要示例,只需在苹果文档中查找即可。 userData 是附加到节点的字典引用,其他一切都应该是对字典如何工作的基本了解以上是关于从两个单独的 SKScene 中检索并立即更新高分的主要内容,如果未能解决你的问题,请参考以下文章