【问题标题】:Adding game center achievements to my game将游戏中心成就添加到我的游戏中
【发布时间】:2015-11-25 15:34:21
【问题描述】:

我正在尝试将成就添加到我的一个游戏中,我制作了一个列表并开始在 iTunes Connect 中添加图片和描述,但是我找不到用 swift 编写的教程,并且具有像 unlockachievement 这样的简单功能以及在其中传递的成就ID

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

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

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

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

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

【问题讨论】:

    标签: ios xcode swift game-center achievements


    【解决方案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 现在如果我在一个游戏中达到了要求并解锁了成就,而在下一个游戏中我没有再次获得这个条件,那么成就仍然是解锁的,对吧?

    【讨论】:

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