2017-01-24 2 views
0

나는 10 레벨의 게임을 가지고 있으며 각 레벨에는 사용자가 수집 할 수있는 궤도가 있습니다. 사용자가 orb을 처음 수집 할 때 레이블에 +1을 추가하고 NSUserDefaults를 사용하여 저장해야합니다. 그건 잘 작동하지만 같은 레벨을 재생할 때 나는 orb를 다시 수집하면 레이블에 다른 +1을 추가 할 수 없습니다. 각 레벨에 각 오브마다 +1을 추가하면됩니다. 따라서 사용자가 모든 orbs를 수집하면 레이블에 저장된 총 10 개의 orbs가됩니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 더 타고난 중복 방지가 없기 때문에 UserDefaults에서 Int 값을 추적Swift에서 레이블에 한 번만 정수를 저장할 수 있도록 플래그를 설정하려면 어떻게합니까?

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

레이블의 '텍스트'값은 어디에 설정하고 있습니까? –

+0

orbLabel.text = UserDefaults(). 정수 (forKey : "saveOrbs") 설명 – coding22

+0

의견을 잘못 읽습니다. 내 GameScene.swift 파일의 레이블이 didMoveToView에 있습니다. – coding22

답변

0

아마 가장 좋은 방법이 아니다. 한 사람이 레벨 1을 10 번 완료하면 그 사람은 그 UserDefaults 값에 따라 10 개의 오브를 모은 것입니다. 아마도 바이너리 또는 부울 저장 방법을 선호 할 것입니다.

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

는 여전히 그 수준의 인덱스 true 표시됩니까 예를 들어, 쉬운 방법은 사전 또는 배열, 예컨대 :

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 
} 

이 그런 수준을 여러 번 완료가 될 것이다 구현합니다.

func getOrbs() -> Int { 
    var orbs = 0 
    self.levels.forEach { orbs += $0 ? 1 : 0 } 
    return orbs 
} 

난 그냥 복사 추천이 좋은 구현되지 않기 때문에이 붙여하지 않을 : 그래서 "수집 된 천체의 총 수를"얻는 것은 같은입니다. 오보 카운트의 불필요한 중복을 방지하면서 스코어를 저장하는 더 나은 방법을 찾을 수 있도록이 방식이 어떻게 작동하는지 이해하려고하십시오.

관련 문제