将游戏中心成就添加到我的游戏中
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
现在如果上一局满足条件解锁成就,下局再没达到这个条件,成就还是解锁的吧?
我试图将成就添加到我的一个游戏中,我列了一个列表并开始在 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 现在如果上一局满足条件解锁成就,下局再没达到这个条件,成就还是解锁的吧?