Corona 每周更新:回合制多人游戏支持

Corona 每周更新:回合制多人游戏支持

Game-Center-icon准备好邀请你的朋友来玩你最新的游戏了吗?你很幸运!

从每日构建版本 #1172 开始,你可以开发 iOS 游戏,充分利用 Game Center 中的回合制多人游戏功能。

我们将所有这些功能构建到 ‘gameNetwork’ 库中,因此无论你是否有现有代码还是新代码,使用它都将非常简单。

有一个完整的示例可用:https://github.com/coronalabs/gameNetwork-iOS-turnbased-multiplayer

这是一个快速导览

要邀请玩家,你需要创建一个具有特定玩家 ID 的匹配

要自动匹配玩家,你还需要创建一个匹配,但你需要指定要匹配的玩家数量

你还可以混合搭配,邀请一些玩家,然后自动匹配玩家到同一个匹配中

当请求侦听器被触发时,事件包含一个属性 ‘event.type’,它会采用以下值

  • invitationReceived
  • matchEnded
  • playerTurn

也许最酷的事情是,通知你轮到你的通知是自动的,所以你不需要做任何事情!

编码愉快!

[更新] 我们还计划增加对 iOS 6 添加的 Game Center 功能的支持,例如邀请消息、玩家属性和玩家组。

walter
22 条评论
  • Chris
    发布于 09:23,7月31日

    听起来不错。尽管我真的不知道如何获取朋友的玩家 ID(是否有办法获取所有 Game Center 好友及其对应的 ID 来邀请他们?)。希望我们能看到有人使用这个功能 🙂

  • 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:47

      ed69 – 感谢您的评论。

      首先,不是的,我们没有故意删除 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),外加提供自定义的服务器端功能,以及支持自定义的推送通知。我说的差不多吗? 🙂