将游戏中心成就添加到我的游戏中

Adding game center achievements to my game

我试图将成就添加到我的一个游戏中,我列了一个列表并开始在 itunes connect 中添加带有图像和描述的成就,但是我找不到用 swift 编写的教程,并且有一个简单的函数,比如 unlockachievement 和里面传递的成就 id

在我的游戏中,我在游戏结束屏幕的 viewdidload 中制作了这个

if (achievement condition){
//unlock achievement ("achievementID")
}

这是添加成就的正确方法吗?在这个视图中,我有很多从以前的视图传递过来的统计数据,所以如果我在这里放置解锁成就功能,弹出窗口应该出现在游戏结束时不会分散玩家的注意力

对于排行榜,我做了一个获取分数和排行榜的函数,我想对成就做同样的事情,我该怎么做?这可能吗?

我在游戏中心视图中也看到了成就进度,是否可以避免它?尤其是只有在满足条件时才会显示的隐藏成就

我就是这样解决的

func loadAchievementPercentages() {
    print("get % ach")
    GKAchievement.loadAchievementsWithCompletionHandler { (allAchievements, error) -> Void in

        if error != nil {
            print("GC could not load ach, error:\(error)")
        }
        else
        {
            //nil if no progress on any achiement
            if(allAchievements != nil) {
                for theAchiement in allAchievements! {

                    if let singleAchievement:GKAchievement = theAchiement {

                        self.gameCenterAchievements[singleAchievement.identifier!] = singleAchievement
                    }
                }
            }

            for(id,achievement) in self.gameCenterAchievements {
                print("\(id) - \(achievement.percentComplete)")
            }

        }
    }
}
func incrementCurrentPercentageOfAchievement (identifier:String, amount:Double) {

    if GKLocalPlayer.localPlayer().authenticated {

        var currentPercentFound:Bool = false

        if ( gameCenterAchievements.count != 0) {

            for (id,achievement) in gameCenterAchievements {

                if (id == identifier) {
                    //progress on the achievement found
                    currentPercentFound = true

                    var currentPercent:Double = achievement.percentComplete

                    currentPercent = currentPercent + amount

                    reportAchievement(identifier,percentComplete:currentPercent)

                    break
                }
            }
        }
        if (currentPercentFound == false) {
            //no progress on the achievement

            reportAchievement(identifier,percentComplete:amount)

        }
    }
}

func reportAchievement (identifier:String, percentComplete:Double) {

    let achievement = GKAchievement(identifier: identifier)

    achievement.percentComplete = percentComplete

    let achievementArray: [GKAchievement] = [achievement]

    GKAchievement.reportAchievements(achievementArray, withCompletionHandler: {

        error -> Void in

        if ( error != nil) {
            print(error)
        }

        else {

            print ("reported achievement with % complete of \(percentComplete)")

            self.gameCenterAchievements.removeAll()
            self.loadAchievementPercentages()
        }

    })
}

在视图中加载我有这个

if (conditions for the achievement)                           
    {

        incrementCurrentPercentageOfAchievement("achievementID", amount: 100)
    }

现在测试成功了,现在我想做一些不同的事情,我不想增加成就百分比而是设置百分比,例如:

成就 - 10 连击 - 玩个游戏 - 8 的组合并显示 80% 的成就进度 - 另一场比赛 - 组合 2

用我现在的代码应该可以解锁成就,因为百分比是累积的,所以我必须写另一个函数来改变成就进度百分比并将其设置为20 现在如果上一局满足条件解锁成就,下局再没达到这个条件,成就还是解锁的吧?