我有多个场景存储在 Global/BaseScene
每个 SceneType: 存储为 enum: 设置为类似于当前场景的 Integer
第一个目标是在每个场景中填充分数,其中有七个。DONE由于堆栈溢出和实验
我必须为每个单独的场景创建默认键,以计算 highScore,因此每个场景都有七个唯一的“highScore”“键”。
在游戏场景中:
var highScoreA1: Int = 0
var score: Int = 0 {
didSet {
a1Score.text = "Score: \(score)"
}
}
//above called before override func didMoveToView(view: SKView) {
//Called in GameOver Method
let scoreDefault = NSUserDefaults.standardUserDefaults()
scoreDefault.setInteger(score, forKey: "score")
if (score > highScoreA1){
let highScoreA1Default = NSUserDefaults.standardUserDefaults()
highScoreA1Default.setInteger(score, forKey: "highScoreA1")
//highscoreA1Default.synchronize()
还有六个与此类似的键。我的目标是在两个不同的场景中填充“totalScoreKey”,一个 Hud 场景和另一个场景(可能是游戏结束场景)
我正在考虑将这些键添加在一起以填充总分的功能。考虑到所有这些场景都是子类(Global BaseScene 的,每个场景都有子类(对于节点操作,可能不相关但认为它可能有用)
我已经尝试过:将所有分数数据移动到一个类中并使用 NSCoding/NSObject 所需的 init 和可选绑定,这变得非常痛苦,老实说,我试图让版本一的事情变得简单。
import Foundation
class GameState {
var score:Int = 0
var highScore:Int()
var totalScore:Int()
class var sharedInstance: GameState {
struct Singleton {
static let instance = GameState()
}
return Singleton.instance
}
}
init() {
// Init
score.type = 0
highScore = 0
totalScore = 0
// Load game state
let defaults = NSUserDefaults.standardUserDefaults()
highScore = defaults.integerForKey("highScore")
}
func saveState() {
// Update highScore if the current score is greater
highScore = max(score, highScore)
// Store in user defaults
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setInteger(highScore, forKey: "highScore")
defaults.setInteger(totalScore, forKey: "totalScore")
NSUserDefaults.standardUserDefaults().synchronize()
}
各种不起作用的函数都默认为零,直到我弄清楚如何正确检索数据。
let total score = "totalScoreKey"
类似于这篇文章,实际上就像这篇文章一样,除了我必须做不同的配置,因为我的个人设置..
在课堂之外并参考场景中的内容,我需要填充该数据。NO Go 默认为零。
我如何简单地将这些键的值加在一起?对于我可以显示类似于其他场景的内容,我已经实现了。稍后我可能想分配一个钥匙链值,现在我只是想让它显示在 GameCenter 中发布。(其中也有键“GameCenterHighScore”)
将它们全部设置为相同的键“highScore”不起作用....为了清楚起见,我尝试了多次。提前致谢。
编辑 如果我尝试将所有默认值加在一起以获得总数,则会引发以下错误:
表达方式过于复杂,无法在合理时间内解决;考虑将表达式分解为不同的子表达式 [Swift 复合算术运算错误3