尝试找出向Game Center报告成就进度的最佳方法时遇到了麻烦。我遇到的问题是,因为我在更新周期中检查自己的分数,因此成就不断地报告给游戏中心。这会触发横幅不断循环,直到游戏被强制退出为止。
我认为我需要在实现成就解锁后放开一些公告来停止报告,但是我在弄清楚如何编写此触发器方面遇到了麻烦。
下面的是checkAchievements()函数,该函数在update()内部调用。这是按照这些思路写东西的许多尝试中的最新一次-每次我遇到同样的问题时。
func checkAchievements() {
var identifier : String? = nil
var percentComplete : Double = 0
switch GameScene.score {
case 1...5 : identifier = "5points"
percentComplete = 100.0
case 6...10 : identifier = "10points"
percentComplete = 100.0
default : identifier = nil
}
if identifier != nil {
let achievement = GKAchievement(identifier: identifier!)
achievement.showsCompletionBanner = true
achievement.percentComplete = percentComplete
GKAchievement.report([achievement], withCompletionHandler: nil)
}
}
答案 0 :(得分:0)
想通了!这是我想出的解决方案。可能可以改善,但至少我们不再因成就而停滞不前。
func checkAchievements() {
var achievements : [GKAchievement] = []
if GameScene.score > 1 && gettingAquainted.percentComplete < 100 {
gettingAquainted.percentComplete = 100
achievements.append(gettingAquainted)
}
if GameScene.score > 5 && movingUp.percentComplete < 100 {
movingUp.percentComplete = 100
achievements.append(movingUp)
}
if GameScene.score > 10 && nowYourCooking.percentComplete < 100 {
nowYourCooking.percentComplete = 100
achievements.append(nowYourCooking)
}
if GameScene.score > 20 && lookAtYou.percentComplete < 100 {
lookAtYou.percentComplete = 100
achievements.append(lookAtYou)
}
if achievements.count > 0{
GKAchievement.report(achievements, withCompletionHandler: nil)
achievements.removeAll()
}
}