2017-10-25 7 views
0

私の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)" 
      } 
    } 

答えて

0

あなたのキーではなく

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() 
} 
+0

が、私は自分のコードを移動する必要があり、それを計算されたプロパティを作成し、getScoreは一度だけ呼ばれる。また1

、ピックupdateHighScoreDefaultsscoreDefaults間違っていますそれはすぐにハイスコアを更新するか、またはdidMoveは正常です更新機能に? – Dewan

+0

でも、常に更新したいのであれば、 'newScore'の' didSet'でも実行しません。私はあなたが何をしているのか分かりません、私はこれがハイスコアの場面のようなものか何かと仮定しました。 – Knight0fDragon

+0

私のコードをもう一度見てください。私はGameSceneから "scoreDefaults"を通してoriginaqlスコアを取得したいので、それを保存したい(newScore、forKey: "updateHighScoreDefaults")ので、私は常に高いスコアを更新することができるので、私は2つの異なるキーを持っていますプレーヤーがアプリを開くたびにupdateHighScoreDefaultsを介してメインメニューを開きます。うまくいけばそれは理にかなっている! – Dewan

関連する問題