问题标签 [gkmatchmaker]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
542 浏览

xcode - GameKit Match - 在 iOS5 和 iOS6 之间邀请好友

我正在尝试在 2 人实时游戏中实现 Game Center 邀请。由于模拟器不支持邀请,我正在一台运行 iOS5 的设备和另一台运行 iOS6 的设备上进行测试(这是故意完成的)。

如果我在任一设备上使用老式的内置GKMatchmakerViewControllerUI 来发起邀请,那么两种方式都可以正常工作——iOS5 设备发起邀请以及 iOS6 设备发起邀请。

但是,在 iOS6 中,我想使用自己的 UI 来选择要邀请的玩家,所以我使用GKMatchRequest以编程方式发出邀请,设置playersToInvite属性。

问题是,另一台(iOS5)设备收到推送通知,启动应用程序,运行[GKMatchmaker sharedMatchmaker].inviteHandler,显示带有邀请详细信息的 Game Center UI,但即使 iOS6 设备发送finishMatchmakingForMatch请求 - iOS5 设备也不会进行任何操作更远。iOS5 机器上没有调用其他处理程序/委托,没有GKMatch返回任何对象,它继续显示 Game Center UI,两个玩家都标记为“就绪”,并显示一条消息“等待 [iOS6 玩家] 开始游戏”。此 UI 上的唯一按钮是取消按钮。

下面是在 iOS6 机器上发送邀请的代码片段:

这是 iOS5 机器上的邀请处理程序的代码片段:

顺序如下:

  • iOS6 发送一个findMatchForRequest带有 iOS5 播放器 ID 的请求。
  • 推送通知显示在 iOS5 机器上。
  • 该应用程序在 iOS5 机器上启动inviteHandler并被调用。
  • 显示GKMatchmakerViewController在带有邀请详细信息的 iOS5 机器上,并且 iOS6 用户具有旋转的“正在连接”状态。
  • iOS6inviteeResponseHandler机器上的 被调用并发送finishMatchmakingForMatch请求。
  • iOS5游戏中心屏幕中iOS6用户的状态从旋转的“Connecting”变为“Ready”,此时两个玩家都被标记为“Ready”。
  • iOS6机器收到match: player: didChangeState:回调,显示iOS5播放器为GKPlayerStateConnected,对于iOS6机器来说,比赛过程结束,可以开始比赛了。
  • 从现在开始,iOS5 机器上不会发生任何事情。它卡在“等待[iOS6用户]开始游戏”,直到它被超时取消。它在任何时候都不会收到任何GKMatch对象,因此它无法开始游戏。

因为如果我在 iOS6 机器上使用标准 Game Center UI 而不是可编程邀请,一切正常,这意味着标准 UI 必须做更多的事情来告诉另一台机器游戏必须开始。但是,我浏览了所有相关的 Game Center 对象,但找不到要发送的任何其他内容。

我应该再次提到反向配置(iOS5 使用标准 UI 发起邀请)在两台机器上都可以正常工作。

帮助,有人吗?

0 投票
1 回答
3961 浏览

ios - iOS 游戏中心 GameKit 程序化邀请对接会

我正在尝试使用自定义 UI(没有 GKMatchMakerViewController)来实现实时多人游戏。我正在使用 startBrowsingForNearbyPlayersWithReachableHandler: ^(NSString *playerID, BOOL reachable) 来查找本地玩家,然后使用 GKMatchmaker 单例(我已经启动)发起匹配请求。

这就是我遇到麻烦的地方。当我发送请求时,完成处理程序几乎立即触发,没有错误,并且它返回的匹配项的预期玩家计数为零。同时,对方玩家肯定没有回应请求

相关代码:

我从上一个问题(iOS Gamecenter Programmatic Matchmaking)中知道我需要包含以下内容:

在上面的代码中,但我不知道应该包含在哪里。我已经尝试过 GKMatchRequest 的受邀者响应处理程序和媒人 finMatchForRequest:withCompletionHandler 都无济于事。发生的行为是匹配器立即返回匹配(甚至在被邀请者被邀请之前),并且即使在被邀请者点击匹配邀请之后,也永远不会调用 matchRequest 的受邀者响应处理程序。

有人可以就此提供建议吗?谢谢你。

...吉姆

0 投票
1 回答
104 浏览

ios - 匹配排名或类似的对手

iOS 游戏中心是否可以匹配技能或排名相似的对手?我想匹配一个具有一定范围值的对手,例如经验或总分。我是 iOS 配对系统的新手。感谢您的任何建议。

我做了一些研究,发现了匹配请求的 playerGroup 和 playerAttribute 属性。这些属性对我想做的事情有帮助吗?

0 投票
0 回答
293 浏览

ios - 实现我自己的自定义 GKTurnBasedMatchmakerViewController

我敢肯定有类似的问题,但我找不到一个例子。我正在尝试为我的回合制游戏重新创建苹果 GKTurnBasedMatchmakerViewController,并为我的回合制 iPhone 游戏使用我自己的自定义界面。我无法正确显示所有选项,所以我希望有人有一个工作示例。我目前的代码是这样的:

如您所见,我现在正在抓取的唯一游戏是状态为 1(正在进行的游戏)且当前参与者 ID 是我的 ID 的游戏。

为了获得不属于我的游戏,我尝试制作不是我的 ID 的游戏,但它包含邀请,我不知道如何将它们分开。

基本上,我希望有一个轮到我的游戏部分,一个不是我轮到我但游戏仍然活跃的部分,一个已完成的旧游戏的部分,以及一个邀请部分。有没有人有一个工作示例,或者他们可以发送给我的页面来解释我正在尝试做的最佳实践?谢谢你的帮助。

0 投票
0 回答
204 浏览

iphone - 游戏中心,如何处理邀请

我正在开发一款多人游戏。对于列出、结束和创建匹配项,我不使用GKTurnBasedMatchmakerViewController. 所以我有自定义视图控制器来显示所有匹配项。

我的问题是,我无法处理比赛邀请。我需要它来更新我的视图。

场景:

  • Alice 启动游戏并查看邀请列表并考虑接受或拒绝匹配。
  • Bob 发送了新比赛的邀请。
  • Alice从通知中心收到邀请通知,但没有点击它就消失了。(如果她点击它,我可以处理)

现在我需要将 Bobs 邀请添加到列表中(并更新 UI)。但我没有任何处理程序被称为邀请。

我已经尝试在玩家通过身份验证后注册处理程序,就像[[GKMatchmaker sharedMatchmaker] setInviteHandler:] 它从未调用过一样,我不知道它是为了什么。

0 投票
1 回答
103 浏览

ios - 当用户关闭然后重新打开游戏时,游戏中心如何管理比赛?

例如,如果他们回复了一条短信或电话,然后他们重新激活了游戏,那么游戏中心会在告诉他们断开连接之前给他们多长时间?是否可以更改此超时值?沙盒模式与生产模式有什么不同吗?

0 投票
1 回答
111 浏览

ios - 未调用 GKMatchmakerViewController 委托方法

我花了几个小时试图调试这个,所以我想我会在这里发帖以帮助可能让某人头痛!

0 投票
1 回答
209 浏览

iphone - GKVoiceChat 无法在 GameCenter 比赛上运行

我正在尝试在我为 iOS 开发的游戏上设置语音聊天,它成功地创建了比赛,但是当我尝试设置语音聊天时它什么也没做,我做错了什么?它运行时不会抛出错误。这是我用来进行语音聊天的代码。

其中建立播放和记录音频会话是:

该代码成功记录了“Did stablish voice chat”,所以它确实运行了代码,但是当我开始说话时,它似乎既没有得到声音也没有发送它。我究竟做错了什么?我错过了什么吗?PS 我没有让 GKVoiceChatPlayerConnected 被解雇。

0 投票
0 回答
235 浏览

ios - 网络游戏:如何处理回合游戏(如游戏管理)

我想知道如何处理 ios 中的 do ruzzle 之类的匹配:我已阅读Game Kit Programming Guide,但似乎不是我正在寻找的内容。

在 ruzzle 中,一个玩家可以玩游戏,另一个玩家也可以玩,而所有两个玩家都没有完成,我不能去第二个。 GKTurnBasedMatch不可能,因为一次只有一名球员可以采取行动。 Real-Time Matches? 但是如果一个玩家接受比赛,然后断开连接,第一名玩家可以完成并等待对手的回答,而在实时比赛中似乎不是这样

我应该有一个单独的服务器来存储游戏,还是我可以使用其他一些苹果 API?谢谢

0 投票
1 回答
169 浏览

game-center - GKMatch 委托函数 didStateChange 调用两次或延迟调用

我正在开发多人游戏,并且我的比赛已成功开始。在我的情况下,我有 3 名球员。播放器1,播放器2,播放器3。从 Player3,我调用 GKMatch 对象的断开方法,我的断开方法是

在 Player1 和 Player2 设备上,第一次调用此 didChangeState 函数,而不是在一段时间后再次为 Player3 调用它。预计只叫一次,但双方玩家都叫2次

我在做什么?断开匹配的最佳做法是什么?

有时也会发生这种情况,但会在一定延迟后调用 didChangeState 方法。虽然在游戏中需要对断开连接的玩家进行一些更新。

延迟响应的原因可能是什么?

请帮忙

提前致谢