2017-01-24 5 views
0

私には10レベルのゲームがあり、各レベルにはユーザーが収集できるオーブがあります。ユーザーがorbを最初に収集すると、ラベルに+1が追加され、NSUserDefaultsを使用して保存する必要があります。それはうまくいきますが、私が同じレベルを演奏し、オーブをもう一度収集すると、別の+1がラベルに追加されません。私は各レベルの各球に+1を加える必要があります。これは、ユーザーがすべてのオーブを収集した場合、ラベルに保存された合計10桁になります。私は間違って何をしていますか?何の生来の重複防止がないのでUserDefaultsInt値を追跡Swiftのラベルに整数を1回だけ保存できるようにするフラグを設定するにはどうすればよいですか?

class LevelOne: SKScene, SKPhysicsContactDelegate { 
var didCollectOrb = true 


override func didMove(to view: SKView) { 
if didCollectOrb == true { 

    UserDefaults().set(UserDefaults().integer(forKey: "saveOrbs")+0, forKey:"saveOrbs") 
    print("will add nothing to label") 
} 
} 

    func didBegin(_ contact:SKPhysicsContact){ 

    var firstBody: SKPhysicsBody 
    var secondBody: SKPhysicsBody 

    // 2. Assign the two physics bodies so that the one with the lower category is always stored in firstBody 

    if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask { 
     firstBody = contact.bodyA 
     secondBody = contact.bodyB 
    } else { 
     firstBody = contact.bodyB 
     secondBody = contact.bodyA 
    } 


if firstBody.categoryBitMask == HeroCategory && secondBody.categoryBitMask == OrbCategory { 

    //saves orbs 
    if didCollectOrb { 
    UserDefaults().set(UserDefaults().integer(forKey: "saveOrbs")+1, forKey:"saveOrbs") 
    print("will add +1 to label") 

    } 

    } 
} 

} 
+0

ラベルの 'text'値はどこで設定していますか? –

+0

orbLabel.text = UserDefaults()。整数(forKey: "saveOrbs")。説明 – coding22

+0

あなたのコメントを誤読します。didMoveToViewのGameScene.swiftファイルにラベルがあります。 – coding22

答えて

0

は、おそらく最良の方法ではありません。ある人がレベル1を10回完了すると、その人はそのUserDefaults値にしたがって10個の球を集めました。おそらく、バイナリまたはブール値の格納方法を好むでしょう。例えば、それは例えば、辞書や配列のどちらかだろう実装するための、簡単な方法:

let levels = [false, false, false, false, false, false, false, false, false, false] //10 values for 10 levels 

func completeLevel(level: Int) { //takes a level from 1-10 
    self.levels[level - 1] = true 
} 

そして、レベルを完了し、複数回:

completeLevel(level: 1) 
completeLevel(level: 1) 
completeLevel(level: 1) 
completeLevel(level: 1) 
completeLevel(level: 1) 

はまだのみ、そのレベルの指標でtrueが表示されます。

私はコピーをお勧めしますと、これは偉大な実装ではありませんので、これを貼り付けていないだろう。だから、「収集オーブの総数を」取得することのようなものがあります。どのように動作しているかを理解して、スコアを保存するためのよりよい方法を見つけながら、orb数の不要な重複を防ぐことができます。

関連する問題