游戏中心成就循环

时间:2020-08-04 19:05:39

标签: swift game-center achievements

尝试找出向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)
        }
        
       
    }

1 个答案:

答案 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()
        }
       
    }