Цикл достижений Game Center - PullRequest
0 голосов
/ 04 августа 2020

У меня проблемы с поиском лучшего способа сообщить о прогрессе достижений в Game Center. Проблема, с которой я столкнулся, заключается в том, что поскольку я проверяю свой счет во время цикла обновления, достижения постоянно отправляются в игровой центр. Это запускает баннер l oop постоянно, пока игра не будет принудительно завершена.

Я предполагаю, что мне нужно сработать какой-то bool, чтобы перестать сообщать, когда достижение было разблокировано, но у меня просто проблемы выясняя, как go написать этот триггер.

ниже - это функция 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 голосов
/ 05 августа 2020

Разобрался! Вот решение, которое я придумал. Вероятно, можно улучшить, но, по крайней мере, мы больше не зацикливаемся на достижениях по мере их появления.

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