iOS 中的 Game Center:GKScore 与 GKAchievement?
Game Center in iOS: GKScore vs. GKAchievement?
我对 iOS 中与 "Game Center" 相关的主题有疑问:GKAchievement 与 GKScore ?
(1) GK成就
我知道在 iOS Game Center 中,我们可以定义成就和排行榜并指定,例如,当玩家完成第一个成就时,我们会给玩家 10 分。即当用户成功完成成就后,我们使用GKAchievement向游戏中心提交成就。
(2) GKScore
那么,什么时候需要用到GKScore呢?正如我在上一段中提到的,当玩家完成第一个成就时,我们可以给玩家一个特定的分数。那么,如果我们已经使用 GKAchievement 为每个新成就给用户新分数,我们还需要使用 GKScore 吗? GKScore 的目的是什么?
或者,当我们使用 GKScore 时,我们不需要使用 GKAchievement ?换句话说,我们只需要使用这 2 个中的 1 个 类 而不是同时使用 ?
这里是C#提交分数的典型代码GKScore:
public void reportScore(long score, string category, GameCenterController controller, bool show_dialog)
{
GKScore scoreReporter = new GKScore (category);
scoreReporter.Value = score;
scoreReporter.ReportScore ((error) => {
((error) => { // original
if(error == null){
if(show_dialog){
new UIAlertView ("Score Reported to Game Center", "Score Reported Successfully", null, "OK", null).Show ();
}
}
else{
if(show_dialog){
new UIAlertView ("Can't Submit Score to Game Center", "Please make sure that you logon to Game Center", null, "OK", null).Show ();
}
}
//NSThread.SleepFor(1);
controller.updateHighScore();
});
}
我做了一些测试,自己想出了“答案”。
如果我们同时使用GKAchievement和GKScore提交成就和分数,那么分数通过GKScore提交 将显示在全球排行榜中。这个分数会覆盖我们通过 GKAchievement
提交成就时应该显示的分数
这是我的 2 个测试用例:
(A) 测试用例 1:
假设我在 Game Center 中定义了一项价值 100 分的成就。当用户玩游戏并完成这个成就时,我先提交这个成就,然后提交3456分的分数(通过我的代码进行测试)。
接下来,我打开游戏中心,我可以看到我在排行榜上显示的分数是 3456(而不是 100点)。
(B) 测试用例 2:
假设我定义了一个价值 100 点的成就。当用户玩游戏并完成这个成就时,我只提交这个成就然后 NOT 手动提交 3456 分的分数(通过我的代码用于测试目的)。
接下来,我打开游戏中心,我可以看到我在排行榜上显示的分数正好是100。
注意:仅当开发人员将 "Score Submission Type" 设置为 "Best Score" 时才会发生以下行为。
如果您随后使用 GKScore 提交的分数比 Game Center 排行榜中的现有分数 HIGHER,那么这个新的 HIGHER 分数将自动发布在排行榜中(通过 Apple Game Center,我们无需执行任何其他操作)。
现在,如果您随后使用 GKScore 提交的分数比 Game Center 排行榜中的现有分数 LOWER,那么这个新的 LOWER 得分将 不会 发布在排行榜中。
(另一方面,如果开发人员将 "Score Submission Type" 设置为 "Most Recent Score",则只有 "Most Recent Score" 和 NOT 最高分数发布在游戏中心。)
我对 iOS 中与 "Game Center" 相关的主题有疑问:GKAchievement 与 GKScore ?
(1) GK成就
我知道在 iOS Game Center 中,我们可以定义成就和排行榜并指定,例如,当玩家完成第一个成就时,我们会给玩家 10 分。即当用户成功完成成就后,我们使用GKAchievement向游戏中心提交成就。
(2) GKScore
那么,什么时候需要用到GKScore呢?正如我在上一段中提到的,当玩家完成第一个成就时,我们可以给玩家一个特定的分数。那么,如果我们已经使用 GKAchievement 为每个新成就给用户新分数,我们还需要使用 GKScore 吗? GKScore 的目的是什么?
或者,当我们使用 GKScore 时,我们不需要使用 GKAchievement ?换句话说,我们只需要使用这 2 个中的 1 个 类 而不是同时使用 ?
这里是C#提交分数的典型代码GKScore:
public void reportScore(long score, string category, GameCenterController controller, bool show_dialog)
{
GKScore scoreReporter = new GKScore (category);
scoreReporter.Value = score;
scoreReporter.ReportScore ((error) => {
((error) => { // original
if(error == null){
if(show_dialog){
new UIAlertView ("Score Reported to Game Center", "Score Reported Successfully", null, "OK", null).Show ();
}
}
else{
if(show_dialog){
new UIAlertView ("Can't Submit Score to Game Center", "Please make sure that you logon to Game Center", null, "OK", null).Show ();
}
}
//NSThread.SleepFor(1);
controller.updateHighScore();
});
}
我做了一些测试,自己想出了“答案”。
如果我们同时使用GKAchievement和GKScore提交成就和分数,那么分数通过GKScore提交 将显示在全球排行榜中。这个分数会覆盖我们通过 GKAchievement
提交成就时应该显示的分数这是我的 2 个测试用例:
(A) 测试用例 1:
假设我在 Game Center 中定义了一项价值 100 分的成就。当用户玩游戏并完成这个成就时,我先提交这个成就,然后提交3456分的分数(通过我的代码进行测试)。
接下来,我打开游戏中心,我可以看到我在排行榜上显示的分数是 3456(而不是 100点)。
(B) 测试用例 2:
假设我定义了一个价值 100 点的成就。当用户玩游戏并完成这个成就时,我只提交这个成就然后 NOT 手动提交 3456 分的分数(通过我的代码用于测试目的)。
接下来,我打开游戏中心,我可以看到我在排行榜上显示的分数正好是100。
注意:仅当开发人员将 "Score Submission Type" 设置为 "Best Score" 时才会发生以下行为。
如果您随后使用 GKScore 提交的分数比 Game Center 排行榜中的现有分数 HIGHER,那么这个新的 HIGHER 分数将自动发布在排行榜中(通过 Apple Game Center,我们无需执行任何其他操作)。
现在,如果您随后使用 GKScore 提交的分数比 Game Center 排行榜中的现有分数 LOWER,那么这个新的 LOWER 得分将 不会 发布在排行榜中。
(另一方面,如果开发人员将 "Score Submission Type" 设置为 "Most Recent Score",则只有 "Most Recent Score" 和 NOT 最高分数发布在游戏中心。)