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

时间:2015-11-25 15:34:22

标签: ios xcode swift game-center achievements

我试图在我的某个游戏中添加成就,我制作了一个列表并开始在itunes connect中添加图像和描述,但我找不到用swift编写的教程,并且功能简单喜欢unlockachievement和内部传递的成就ID

在我的游戏中,在屏幕上的游戏viewdidload中我做了这个

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

这是一种添加成就的正确方法吗?在这个视图中,我从前一个视图中传递了很多统计数据,所以如果我在这里放置了unlockachievement函数,弹出窗口应该出现在游戏结尾而不会分散玩家注意力

对于排行榜我制作了得分和排行榜的功能,我想为成就做同样的事情,我该怎么做?有可能吗?

我还阅读了游戏中心视图中的成就进度,是否有可能避免它?特别是隐藏的成就只有在满足条件时才会显示

1 个答案:

答案 0 :(得分:1)

这就是我解决的问题

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 现在,如果在游戏中我满足了要求并解锁了成就,并且在下一场比赛中我再也没有得到这个条件,那么成就仍然是解锁的,对吗?