2013年7月31日
Corona 每周更新:回合制多人游戏支持
从每日构建版本 #1172 开始,你可以开发 iOS 游戏,充分利用 Game Center 中的回合制多人游戏功能。
我们将所有这些功能构建到 ‘gameNetwork’ 库中,因此无论你是否有现有代码还是新代码,使用它都将非常简单。
有一个完整的示例可用:https://github.com/coronalabs/gameNetwork-iOS-turnbased-multiplayer。
这是一个快速导览
要邀请玩家,你需要创建一个具有特定玩家 ID 的匹配
1 2 3 4 5 |
gameNetwork.request( "createMatch", { playerIDs = {"w4o98y3498hg349h", "wrighfq547hg543"}, listener=requestCallback }) |
要自动匹配玩家,你还需要创建一个匹配,但你需要指定要匹配的玩家数量
1 2 3 4 5 6 |
gameNetwork.request( "createMatch", { minPlayers = 2, maxPlayers = 3, listener=requestCallback }) |
你还可以混合搭配,邀请一些玩家,然后自动匹配玩家到同一个匹配中
1 2 3 4 5 6 7 |
gameNetwork.request( "createMatch", { playerIDs = {"w4o98y3498hg349h", "wrighfq547hg543"}, minPlayers = 2, maxPlayers = 3, listener=requestCallback }) |
当请求侦听器被触发时,事件包含一个属性 ‘event.type’,它会采用以下值
- invitationReceived
- matchEnded
- playerTurn
也许最酷的事情是,通知你轮到你的通知是自动的,所以你不需要做任何事情!
编码愉快!
[更新] 我们还计划增加对 iOS 6 添加的 Game Center 功能的支持,例如邀请消息、玩家属性和玩家组。
Chris
发布于 09:23,7月31日听起来不错。尽管我真的不知道如何获取朋友的玩家 ID(是否有办法获取所有 Game Center 好友及其对应的 ID 来邀请他们?)。希望我们能看到有人使用这个功能 🙂
Christopher
发布于 09:27,7月31日https://docs.solar2d.cn/api/library/gameNetwork/request.html
🙂
dchan
发布于 09:56,7月31日@Chris
你可以使用这个来获取你朋友的 ID
local function requestCallback(event)
print(event.data[1].playerID)
end
gameNetwork.request( “loadFriends”, { listener=requestCallback } )
请注意,这只会获取你朋友的 ID,而不是他们的别名。要获取他们的别名,你需要这样做
gameNetwork.request( “loadPlayers”,
{
playerIDs =
{
“G:123456789”,
“G:1234567890”,
“G:0123456789”
},
listener=requestCallback
})
在我们的示例代码中有一个示例,位于此处
https://github.com/coronalabs/gameNetwork-iOS-turnbased-multiplayer/blob/master/menu-scene.lua#L70
希望这能帮助你,编码愉快!
Chris
发布于 10:19,7月31日哦,谢谢你的快速帮助 😀
ed69
发布于 12:29,7月31日@Walter – 非常感谢这个新功能,但不幸的是它看起来不完整!请告知我们,是否还有其他重要的匹配请求参数可用,例如
– inviteMessage,
– playerAttributes,
– playerGroup,
因为它们最初在 GC 中可用
http://developer.apple.com/library/ios/#documentation/GameKit/Reference/GKMatchRequest_Ref/Reference/Reference.html
dchan
发布于 18:45,7月31日@ed69
我们没有实现 inviteMessage,因为这是 iOS 6+ 的功能。由于我们支持 iOS 5,我们不想有一些功能在所有我们支持的 iOS 平台上都不可用。
至于另外两个,它们对于实现回合制多人游戏来说不是至关重要的。这将是我们将来在第二次传递中实现的功能。
ed69
发布于 11:37,8月1日@dchan – 对不起,但这个解释非常奇怪 – 你怎么能决定仅仅因为它支持 iOS6+ 就阻止功能开发?
iOS7 即将发布,测试版构建已经集成到 Corona SDK 中了!
正如 Kerem 也好意地指出的那样 – 苹果已经报告说,超过 94% 的 iOS 客户正在使用 iOS6!
关于哪些功能对于回合制多人游戏“至关重要”或不重要 – 你怎么能承担这个责任来决定在我的最终产品中应该提供哪些功能,而不应该提供哪些功能?
我是付费的专业 Corona SDK 客户,我希望获得回合制多人游戏支持的全部功能,正如这篇博文的第二句话中所述(尤其是其他开发人员也明确询问此事时)!
例如,我需要有“playerGroup”选项可用,以便能够将想要彼此玩不同游戏模式的玩家分开 – 这对于当今的每个多人游戏应用程序都是必不可少的!
我应该如何解决这个问题 – 有什么建议吗?你能不能提供任何合理的论据来解释为什么没有实现?
另一方面 – 如果你无法并且不打算为 iOS 上的回合制多人游戏提供全面支持 – 请至少让 Walter 将这篇博文的标题修改为类似于“回合制多人游戏支持仅部分可用”的内容 – 这会更公平,并且不会让其他开发人员感到困惑。
Kerem
发布于 23:37,7月31日@dchan,问题是仍然运行 IOS 5 的设备百分比是多少,以及这个百分比是否足够大以至于阻碍如此关键的功能(即 inviteMessage)…… 根据 OpenSignal 报告 (http://opensignal.com/reports/fragmentation-2013/) 我们谈论的是 95% 到 5%… 也许这个决定需要重新考虑。
Andreas
发布于 00:25,8月1日太棒了,回合制多人游戏是我最喜欢的类型。
+1 表示支持 iOS 6+ 的“inviteMessage”,这是绝对需要的。
最好的,
Andreas
Overtorment
发布于 13:56,8月1日我认为这也可以用于匹配实时多人游戏。
Corona 处理匹配和用户 ID,并且所有游戏交互都可以在发布/订阅通道中进行。查看此库以获取自托管解决方案 https://github.com/Overtorment/NoobHub
ed69
发布于 03:27,8月2日NoobHub 是一项不错的服务,我之前已经尝试过了 – 绝对可以使用它来构建完全可用的多人游戏,但这需要托管我自己的服务器(甚至是服务器场)来安装它并进行配置,以确保其正常运行,设置监控和负载跟踪等等 – 所有这些都是你需要拥有的,如果你想使用自己的服务器,当然这也不是免费的 – 你需要支付托管费用并花费大量工作时间!
但重点是 – 所有这些都不真的需要完成,因为 Apple 方面已经提供了功能齐全的多人游戏服务(而且已经很长时间了),我(理论上)可以作为订阅 Apple iOS 开发人员完全免费使用 – 但它们只是由于未知原因在 Corona SDK 实现中被阻止了!
这就是我在这里试图澄清的 – 为什么它只是部分实现,以至于在任何或多或少的严肃游戏中,它都只是不可用或看起来不专业?
@Walter – 你能否澄清一下为什么这个实现做得如此糟糕?是不是因为这 3 个额外的参数在 Corona SDK 中被忽略,只是为了让开发者有更多理由购买更昂贵的“企业版”产品?
David Rangel
发布于 08月02日 07:47ed69 – 感谢您的评论。
首先,不是的,我们没有故意删除 3 个参数来让您升级到 Corona 企业版。这从来都不是我们对任何功能是否实施的意图。
这里发生了两件事
1) 团队根据一些内部截止日期决定了优先事项,这 3 个参数被排除在*第一批*之外
2) 与 Walter 之间存在轻微的沟通失误,因此出现了“完全支持”的标题
我们理解您的反馈。请注意,Danny 和我都提到这是*第一批*。我个人会尽快看看我们能做些什么来包含这些其他项目。
David
Walter
发布于 08月02日 09:29好的,我已经在文章底部添加了一个更新来澄清。
@ed69,我想适当地安排优先级,所以你能帮助我们了解这些 iOS 6 特有的 GC 功能在你的游戏中如何发挥关键作用吗?
例如,非常成功的 Letterpress (v1.4) 游戏广泛使用 Game Center。但是,它可以在 iOS 5 上运行,因此它不使用任何 iOS 6 特有的 GC 功能。
ed69
发布于 08月02日 15:17@David & @Walter – 非常感谢你们清晰的回复!
我很乐意提供帮助,特别是如果这能加速并改善情况。
首先,我想解释一下为什么缺少参数(至少对我而言)使得当前的基于回合的多人游戏几乎不可用。
1. 对我来说最关键和重要的是缺少参数“playerGroup” - 从 Apple 的角度来看,它不是强制要求的,但实际上它是必须的,因为游戏中存在多种游戏模式(而且大多数游戏都是这样)。例如,如果我们在游戏中要玩 2 张地图,则需要将所有用户分成 2 组,并将此信息提供给 Game Center,以便匹配器函数知道第 1 组的玩家应该在地图 1 上与第 1 组的玩家一起玩,而不是与应该在地图 2 上玩的第 2 组的玩家一起玩。我们也可以在纸牌/棋盘游戏中看到相同的用例 - 例如,跳棋游戏有很多变体(如棋盘尺寸 8x8 或 10x10 以及其他游戏规则修改),这也需要相应地将用户分成特定的组:选择 8x8 棋盘的用户不能与选择 10x10 棋盘的用户一起玩,而只能与相同尺寸的棋盘一起玩。希望这很清楚,这是 Apple GameKit 文档的链接:http://developer.apple.com/library/ios/documentation/GameKit/Reference/GKMatchRequest_Ref/Reference/Reference.html#//apple_ref/occ/instp/GKMatchRequest/playerGroup
2. “playerAttributes” – 当前的实现中也缺少,对我来说现在并不关键,但是为了方便起见,将它与“playerGroup”属性一起实现是有意义的。其文档在此处可用:http://developer.apple.com/library/ios/documentation/GameKit/Reference/GKMatchRequest_Ref/Reference/Reference.html#//apple_ref/occ/instp/GKMatchRequest/playerAttributes
请注意 – 这两个属性“playerGroup”和“playerAttributes”不是在 iOS60 中新发明的 – 它们实际上从 iOS4.1 就已经可用。
3. “inviteMessage” – 这是一个相对较新的 iOS6.0 属性,它允许您自定义邀请文本消息以显示给玩家加入比赛。当然,可以在没有它的情况下启动多人游戏比赛,但是当它们具有这种精细的自定义时,这会让你的(我们的)应用程序看起来更专业,但我可以没有它(可能像 Letterpress 一样)。
4. “maxPlayersAllowedForMatchOfType” – 严格来说,从 iOS6+ 开始,此函数是必须的,并且应该在设置匹配请求中的 maxPlayers 参数之前使用(根据 Apple 的要求)。
如果有其他问题需要澄清,请告诉我。
如果能从您那里得到关于何时集成这些缺失参数的明确反馈(或者可能逐个集成,例如 playerGroup,然后是其他参数,如果您想这样做的话),那就太好了。
David Rangel
发布于 08月02日 15:20太棒了,感谢您的反馈!
我们将在周一的工程会议上讨论,我会提供更新。
Mario Roberti
发布于 08月03日 10:28啊,太棒了!在 Corona Cloud 包停用后,这里似乎是一个不错的去处。等我完成当前的项目后,迫不及待地想要开始深入研究!
-Mario
ed69
发布于 08月06日 10:24@David & @Walter – 能否提供有关缺失属性的更新?
基本上,将它们添加到现有实现中应该不需要太多工作 – 据我所知,只需要将它们添加到 gameNetwork.request 中,然后像已经为参数 playerIDs、minPlayers 和 maxPlayers 所做的那样,从 lua 传递到 GameKit,就可以了,不是吗?
ed69
发布于 08月07日 10:35... 正在下载包含所有提到的属性的新版本 2013.1180!
非常感谢你们的支持!
David
发布于 08月12日 10:47是的 – 现在在每日构建版本中!
Kerem
发布于 08月07日 10:59构建 1181 日志
iOS:为 iOS 基于回合的多人游戏添加对 playerGroup、playerAttribute、inviteMessage 和 maxPlayersAllowedMatch 的支持。
干得好!!!非常感谢你们对反馈如此积极的回应。祝你今天过得愉快。
Muchacho
发布于 08月12日 13:20我是一名正在接受培训的程序员,到目前为止,我使用 Kwik 创建应用程序,并在其中添加自定义代码。我阅读了 Corona Cloud 文档以及 GameCenter 文档和本文档。但我仍然不明白一些事情。是否需要 Corona Cloud 帐户才能实现本文中描述的功能?还是在 GameCenter (Apple) 后端发生?这是否需要年度订阅?
我希望得到一些关于理解这一切如何协同工作的指导。
提前感谢。
GregH
发布于 02月19日 20:34有人能给出一个关于它如何与使用类似 http://parse.com/ 的东西相关的高级概述吗?例如(我来做一个有根据的猜测),使用苹果特定的方法是否只关注基于回合的支持,但它是免费的。而 http://parse.com/ 只有在达到一定的使用水平(然后付费)时才是免费的,但它会为分布在两者之间的玩家提供跨平台(例如 IOS/Android),外加提供自定义的服务器端功能,以及支持自定义的推送通知。我说的差不多吗? 🙂