【问题标题】:Game Center Achievement Looping游戏中心成就循环
【发布时间】:2020-08-04 19:05:39
【问题描述】:

我在尝试找出向 Game Center 报告成就进度的最佳方式时遇到了一些麻烦。我遇到的问题是,因为我在更新周期中检查我的分数,所以成就被不断地报告给游戏中心。这会触发横幅不断循环,直到游戏被强制退出。

我认为我需要在成就解锁时触发某种 bool 来停止报告,但我只是在弄清楚如何编写此触发器时遇到了麻烦。

下面是在 update() 内部调用的 checkAchievements() 函数。这是按照这些思路写东西的许多尝试中的最新一次——每次我都遇到同样的问题。

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

【问题讨论】:

    标签: swift game-center achievements


    【解决方案1】:

    想通了!这是我想出的解决方案。可能可以改进,但至少我们不再卡在循环成就发生时。

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

    【讨论】:

      猜你喜欢
      • 2012-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-30
      • 2012-12-22
      • 2012-06-27
      • 1970-01-01
      相关资源
      最近更新 更多