私のGameSceneには、UserDefaultsを介してゲームの最後に保存されているスコアがあります。以下はスコアを保存するための私のGameSceneコードです。2つの別々のSKSceneの高いスコアを取得して即座に更新する
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)"
}
}
が、私は自分のコードを移動する必要があり、それを計算されたプロパティを作成し、
getScore
は一度だけ呼ばれる。また1、ピック
updateHighScoreDefaults
対scoreDefaults
間違っていますそれはすぐにハイスコアを更新するか、またはdidMoveは正常です更新機能に? – Dewanでも、常に更新したいのであれば、 'newScore'の' didSet'でも実行しません。私はあなたが何をしているのか分かりません、私はこれがハイスコアの場面のようなものか何かと仮定しました。 – Knight0fDragon
私のコードをもう一度見てください。私はGameSceneから "scoreDefaults"を通してoriginaqlスコアを取得したいので、それを保存したい(newScore、forKey: "updateHighScoreDefaults")ので、私は常に高いスコアを更新することができるので、私は2つの異なるキーを持っていますプレーヤーがアプリを開くたびにupdateHighScoreDefaultsを介してメインメニューを開きます。うまくいけばそれは理にかなっている! – Dewan