gpt4 book ai didi

swift - 如何设置一个标志以允许整数在 Swift 的标签中仅保存一次?

转载 作者:行者123 更新时间:2023-11-30 12:44:17 25 4
gpt4 key购买 nike

我有一个有 10 个级别的游戏,每个级别都有一个用户可以收集的球体。当用户第一次收集球体时,应该向标签添加 +1 并使用 NSUserDefaults 保存。这工作正常,但是当我玩相同的级别并再次收集球体时,它不应该在标签上添加另一个+1。我只需要为每个关卡中的每个球体添加+1。因此,如果用户收集了所有球体,标签中总共会保存 10 个球体。我做错了什么?

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")

}

}
}

}

最佳答案

跟踪 UserDefaults 中的 Int 值可能不是最好的方法,因为没有固有的重复预防。如果一个人完成 1 级 10 次,那么他们根据该 UserDefaults 值收集了 10 个球体。也许您更喜欢二进制或 bool 存储方法。例如,实现它的一种简单方法是字典或数组,例如:

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。因此,获取“收集的球体总数”类似于:

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

我不建议仅仅复制和粘贴它,因为这不是一个很好的实现。只需尝试了解其工作原理,以便您可以找到更好的方法来存储分数,同时防止不必要的球体计数重复。

关于swift - 如何设置一个标志以允许整数在 Swift 的标签中仅保存一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41836798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com