2016-06-10 79 views
0

我想更新一个人在我的游戏中跳跃的总次数,但我遇到了一些问题。以下是游戏中发生跳跃的变量以及发生加时跳跃的次数。更新变量的NSUserDefaults

var timesJumped: Int = 0 
var totalTimesJumped: Int = 0 

我有一个变量NSUserDefaults,所以它记得甚至当应用程序关闭或关闭多少次。

var timesJumpedTotal = NSUserDefaults.standardUserDefaults().integerForKey("times jumped") 

我有这个代码块,如果timesJumpedTotal应该始终运行,所以当我尝试和文本设置为这个timesJumpedTotal我得到一个空白的文本字段是真实的运行。是否有一个原因?

if timesJumpedTotal >= 0 { 
     totalTimesJumped = totalTimesJumped + timesJumped 
     NSUserDefaults.standardUserDefaults().setInteger(totalTimesJumped, forKey: "times jumped") 
    } 

在SKScene,我想显示这个统计我有这样的代码来设置一个节点的文本到totalTimesJumped全文:

let timesJumped = NSUserDefaults.standardUserDefaults().integerForKey("times jumped") 
totalTimesjumped = childNodeWithName("TotalTimesJumped") as! SKLabelNode 
totalTimesjumped.text = "\(totalTimesjumped)" 

我不知道为什么会这样,有没有人有任何想法?

刚才我也试过这个。

totalTimesJumped = totalTimesJumped + timesJumped 
timesJumpedTotal = totalTimesJumped 
NSUserDefaults.standardUserDefaults().setInteger(timesJumped, forKey: "high score") 
NSUserDefaults.standardUserDefaults().synchronize() 
+0

你可以检查一个断点,NSUserDefaults.standardUserDefaults()。setInteger(totalTimesJumped,forKey:“次跳”)被调用,并且它在你之前完成尝试取值?另外,我建议你为你的密钥使用不同的方法,声明一个常量让timesJumpedKey =“com.yourgame.timesjump”,并用它作为你的密钥(com.yourgame ...是为了保证它的唯一性) 。 –

回答

1

尝试改变

if timesJumpedTotal >= 0 { 
    totalTimesJumped = totalTimesJumped + timesJumped 
    NSUserDefaults.standardUserDefaults().setInteger(totalTimesJumped, forKey: "times jumped") 
} 

要:

if timesJumpedTotal >= 0 { 
    totalTimesJumped = timesJumpedTotal + timesJumped 
    NSUserDefaults.standardUserDefaults().setInteger(totalTimesJumped, forKey: "times jumped") 
} 

看来,当你从获取NSUserDefaults的数据你永远不会真正使用它来增加和重写的总。命名你的变量不那么相似,将会帮助你查看问题。可能有一些其他地方,你必须改变它