2017-10-25 27 views
0

내 GameScene에는 UserDefaults를 통해 게임이 끝날 때 저장되는 점수가 있습니다. 아래는 점수를 저장하는 내 GameScene 코드입니다.2 개의 별도 SKScene에서 고득점을 즉시 검색하고 업데이트하십시오.

var totalPoints = 0 { 
     didSet { 
      score.text = " \(totalPoints)" 
      UserDefaults.standard.set(totalPoints, forKey: "scoreDefaults") 
     } 
    } 

플레이어가 평생을 잃으면 게임에서 기본 메뉴 장면으로 되돌아갑니다. 이 장면에서 플레이어의 마지막 점수가 이전에 얻은 점수보다 높으면 Main Menu 장면에서 즉시 높은 점수를 검색하고 업데이트하고 싶습니다. 그러나 어떤 이유에서든 사용자가 마지막으로 높은 점수보다 높거나 낮을지라도 게임이 끝날 때마다 얻는 모든 점수를 지속적으로 업데이트합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 아래는 나의 메인 메뉴 장면이다. "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 잘못 업데이트 기능으로 즉시 높은 점수를 업데이트하거나 잘 했어? – Dewan

+0

당신이 끊임없이 업데이트하고 싶다면,'newScore'의'didSet'에도하지 마십시오. 나는 네가하고있는 일을 모르고 있는데, 나는 이것이 고득점 장면이나 무언가 같다고 생각했다. – Knight0fDragon

+0

제 코드를 다시 보시기 바랍니다. 당신이 볼 수 있듯이 GameScene에서 "scoreDefaults"를 통해 originaql 점수를 얻고 싶고 (newScore, forKey : "updateHighScoreDefaults") 그것을 저장하고 싶습니다. 그래서 계속해서 높은 점수를 업데이트 할 수 있습니다. 플레이어가 앱을 열 때마다 updateHighScoreDefaults를 통해 기본 메뉴. 다행히도 그것은 의미가 있습니다! – Dewan