处理iOS游戏中心多个用户在持久游戏中的情况

6

我已经阅读了https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/GameKit_Guide/Achievements/Achievements.html#//apple_ref/doc/uid/TP40008304-CH7-SW13

我对在单个设备上支持多个游戏中心用户的问题感到困惑。

特别是,我对如何在具有总体持久性进展的游戏中实现这一点感到困惑,例如冒险游戏或填字游戏。

也就是说,我认为有两种类型的游戏。其中一种是开始游戏,一直玩到死亡,然后游戏结束。这种游戏似乎很容易处理Game Center多用户模型。当新的Game Center玩家登录时,我可以加载他们的Game Center统计信息,然后他们可以玩游戏,我会相应地调整他们的成就/分数。唯一的特殊情况是,如果Game Center玩家A正在玩游戏,游戏转到后台并且Game Center玩家B登录,那么游戏回到前台会发生什么?在这种情况下,似乎很容易只结束正在进行的游戏,并说“抱歉,您切换了Game Center用户。您需要开始新游戏。”

但另一种游戏是具有总体进展的游戏,通常会自动保存进度。例如,假设我有一个填字游戏有100个谜题。假设玩家A已经完成了8个谜题,并且正在完成第9个谜题,然后Game Center玩家更改为玩家B。假设玩家A已经获得了“解决5个谜题”的成就。现在玩家B登录后应该发生什么?

对于“正确”处理此问题的方法(似乎是Apple上述文档所暗示的方法之一),游戏应该为每个Game Center玩家保留完整的保存状态。因此,当玩家B登录时,应自动将玩家A的状态保存到侧面,并清除谜题,以便玩家B可以从头开始解决它们。即使这样,当玩家A随后在新设备上安装游戏时仍然存在问题。新安装的游戏将没有完成任何谜题,但是玩家A的Game Center用户已经获得了“解决5个谜题”的成就。那么我们应该重置玩家A的成就吗?我们应该如何自动填充谜底以使玩家A的游戏达到他的成就?

我认为Game Center模型并不是针对这种总体持久性进展而设计的。(事实上,如果游戏使用自己的登录系统来管理多个玩家的状态,那么在处理多个Game Center玩家时似乎变得更加复杂,因为需要一种方式将Game Center玩家与游戏登录玩家匹配,据我所见,游戏必须提供某种匹配界面才能使其正常工作。)

无论如何,以下是我对“穷人版”的看法,即如何将您的常规单人游戏与全局持久状态(例如,像填字游戏一样)结合起来,并使其在Game Center中“足够好”地运行:

(1)游戏不会尝试将游戏同步到您的Game Center统计数据中。例如,如果您在一个设备上解决了9个谜题,然后在第二个设备上安装游戏并使用相同的Game Center用户进行登录,则新游戏仍将没有解决任何谜题,即使您的Game Center玩家仍然拥有“已解决5个谜题”的成就。

(2)如果您继续完成5个谜题,那么什么也不会改变,因为您已经获得了该成就。但是当您完成25个谜题(或下一个成就级别)时,您将获得新的成就。

(3)假设您(玩家A)已经完成了9个谜题,然后您注销了Game Center,其他人(玩家B)在同一设备上登录。在这种情况下,我们将加载玩家B的成就,假设玩家B当前在游戏中没有成就。在富人版中,我认为我们应该重置谜题以匹配玩家B的成就。但是在穷人版中,我们只需立即(并且悄无声息地)更新玩家B的成就以匹配游戏状态。因此,玩家B将立即获得“已解决5个谜题”的成就(尽管是玩家A“获得”它)。

这个穷人版的底线是:

(a)如果两个或更多玩家在单个设备上登录和退出Game Center,则在实现成就时,当前登录的玩家将获得该成就。此外,在登录时,如果状态更高,则玩家的成就将“赶上”游戏状态。因此,就像所有玩家“共同进步”一样——任何一个玩家的成就都会被任何其他登录的玩家继承。

(b)如果您卸载/重新安装或在新设备上安装,则在谜题方面,您将从头开始,但是您的成就保持在高点,并且一旦您开始超过这些数字,成就将随之增加。

因此,总之,我认为任何具有全局持久进度(冒险游戏,填字游戏)的游戏都将面临多个Game Center玩家的这些问题。我认为有两条路可走:正确的方法和穷人版的方法。正确的方法似乎很复杂。例如,冒险游戏将不得不询问用户:“我看到您刚刚使用不同的Game Center玩家B进行登录。您要继续游戏并将所有进一步的进展与玩家B相关联,还是要重置游戏以便玩家B可以从头开始?”然后,它必须准备为任何数量的Game Center用户保存完整的状态(库存,地图等)。

贫民的解决方案看起来不是很理想,但对于现有的游戏而言,如果它们只是想在不破坏自身的情况下添加Game Center支持,这似乎是一个合理的替代方案,因为“正常”的使用情况并不是在单个设备上不断登录和注销多个Game Center玩家。我的问题如下: (a) 我对这种情况的分析正确吗? (b) 我所概述的贫民解决方案是可行的吗?它是否是常用的解决方案?

1
这是一个有趣的话题,但我建议在 Stack Exchange 的游戏开发网站上发布。问题(和解决方案)抽象于编程层。 - codeperson
@m-katz 最终找到答案了吗? - sdabet
是的,虽然它已经过时了,但我认为GC是基于假设“一个设备”=“一个用户”而设计的。您不会在一个设备上使用多个帐户。许多人不使用同一设备。这在iPhone和iPod touch上大多是正确的。但是,在家里的沙发桌上放置iPad会很快破坏这种假设。这也会破坏iCloud帐户,这是另一个更棘手的问题。 - Jonny
1个回答

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接