问题标签 [gkturnbasedmatch]

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 投票
2 回答
108 浏览

ios - player(_:wantsToQuitMatch:) 什么时候被调用?

我正在使用 Game Center 实现我的第一个回合制游戏,我很难理解谁收到了来自 player(_:wantsToQuitMatch:).

当前正在退出的玩家(通过一些游戏内退出方法)是否会收到此通知?当前玩家退出时其他玩家会收到通知吗?如果当前玩家从 Game Center 中退出(移除游戏)会发生什么?

我已经尝试在 Game Center 中删除游戏,当轮到我时,仍然在游戏中的玩家不会触发该方法。我无法触发该方法。

0 投票
2 回答
723 浏览

ios - iOS 10 GameCenter 通过消息传递邀请

自 iOS 6 以来,我们通过 GameCenter 使用回合制游戏,一经推出(多年来运行完全相同的代码)。

但是,由于 iOS 10 邀请不再起作用。被邀请的人确实会在消息中收到一条消息,上面写着“邀请玩 %game_name$”。

  • 没有向游戏本身发送邀请推送通知(新回合通知已成功发送)。

  • 当前游戏列表中没有新游戏出现接受邀请(我们使用标准的 GK*ViewControllers),就像之前显示的那样。

  • 如果用户在消息中点击消息,则会在短时间内显示带有“正在检索...”文本的警报视图,但没有任何反应。

Apple 声明 ( https://developer.apple.com/videos/play/wwdc2016/611/ ) 无需更改代码。但它肯定是坏的(或者“没有变化”的说法是错误的)。

有什么想法吗,同事们?

0 投票
1 回答
30 浏览

gkturnbasedmatch - GKTurnBasedMatch currentParticipant becomes nil after saveCurrrentTurn

I have a method that gets called whenever a new match is created (it setups the game data), and it works well, except sometimes (randomly) the current participant becomes nil after I try to save the data.

I've placed a couple of breakpoints, and up until I try to save the initial game data, currentParticipant is not nil, but after saving, it's sometimes nil:

Any ideas?

0 投票
1 回答
98 浏览

iphone - 如何可靠地确定响应 GKTurnBasedMatchmakerViewController 成功创建了哪个匹配项

在 iOS 10 上,我尝试使用 GKTurnBasedMatchmakerViewController 创建匹配。我可以调出视图,以便用户可以选择匹配或邀请。我无法弄清楚如何可靠地确定为此创建了哪个匹配项。问题是,在 iOS 10 中,GKTurnBasedMatchmakerViewControllerDelegate 的 didFindMatch 方法已被弃用。该方法曾经与比赛一起调用。以前的日子很轻松!

弃用消息显示“使用 GKTurnBasedEventListener player:receivedTurnEventForMatch:didBecomeActive”。文档和堆栈溢出线程充满了调用该方法的原因。请参阅此线程以获得一个好的列表: Gamecenter ios 9 GameCenter GKLocalPlayerListener methods not called。如果你想象一个用户已经玩了几款游戏,你会看到这个方法会因为很多不同的原因被调用,据我所知,它可能随时发生。我的问题是:如何确定这些调用中的哪一个是“我刚刚为你创建了一个匹配,就在这里!” 称呼。

一些我认为行不通的例子:

  • 简单地假设在您调出 GKTurnBasedMatchmakerViewController 之后发生的第一次调用 receivedTurnEventForMatch 似乎是错误的,因为 receivedTurnEventForMatch 可能会通知用户轮到他们在另一个游戏中。除非系统保证,当视图启动时,它们只会调用与视图对应的匹配项的此方法。这似乎是一个相当大的黑客,所以我假设他们不这样做。
  • 对处于“匹配”状态且 didBecomeActive=true 的其他玩家调用 receivedTurnEventForMatch 似乎是比赛中第一个玩家的解决方案,但不是第二个(因为两个玩家都完成了匹配)。
  • 查看 MatchID 并查看我们是否“以前见过”,如果没有,假设它是刚刚创建的匹配似乎不可靠,因为用户可能已经卸载了应用程序然后重新安装,而我们已经忘记了所有关于哪个我们“以前见过”的比赛。

我被卡住了,任何帮助表示赞赏。

0 投票
2 回答
406 浏览

ios - 在使用 GKLocalPlayerListener 的 receivedTurnEventFor 匹配时,有没有办法确定转弯事件是否是匹配查找的结果?

在 iOS 9 中,Apple 弃用public func turnBasedMatchmakerViewController(_ viewController: GKTurnBasedMatchmakerViewController, didFind match: GKTurnBasedMatch) GKTurnBasedMatchmakerViewControllerDelegate.

苹果的方向是func player(_ player: GKPlayer, receivedTurnEventFor match: GKTurnBasedMatch, didBecomeActive: Bool)使用GKLocalPlayerListener.

仅使用receivedTurnEventFor match会导致以下情况:

  1. 用户点击+显示GKTurnBasedMatchmakerViewController.
  2. 用户点击Play Now,Game Center 将搜索匹配项。
  3. Game Center 将返回一个空匹配matchData(新匹配),或者将用户置于一个正在进行的匹配中——并且游戏通过receivedTurnEventFor match.

虽然确定是否已创建新匹配很简单(使用matchData),但似乎没有一种方法可以确定是否已找到匹配与匹配是否在所有事件流过时更新receivedTurnEventFor match

我的问题是这样的:

使用GKLocalPlayerListener'sreceivedTurnEventFor match方法时,有没有办法确定回合事件是否是匹配 find的结果?

0 投票
0 回答
67 浏览

ios - gamecenter bot 5005 没有这样的玩家 ID

是否可以创建一个回合制比赛,让玩家在游戏中心使用特定的“机器用户帐户”?

我正在制作一个回合制游戏,并希望允许最终用户与机器对战。因此,我为我的机器创建了一个游戏中心帐户。

在我的 GKTurnBasedMatch 中,我有我的 GKTurnBasedParticipant

遍历所有参与者,我看到机器玩家 ID 是:

我还尝试输入实时和沙盒帐户的电子邮件地址:AppEnemy1Sand@gmail.com 和 AppEnemy1@gmail.com

我在模拟器上运行

但是,当我请求开始比赛时,参与者是我的机器,

}

错误内容如下:

0 投票
1 回答
124 浏览

ios - 回合制配对在 iOS 10 中不起作用

我的游戏在 iOS 10 之前运行良好。现在,使用 iOS 10 的每个人都无法邀请和玩他们想要的人。

当用户说他们想玩多人游戏时,我创建一个GKMatchRequest这样的:

我使用 aGKTurnBasedMatchmakerViewController来处理邀请等。用户会看到一个界面,可以让他们更改比赛中的玩家数量并邀请玩家。假设他们只想要 2 个玩家,所以他们离开了,想和他们的朋友一起玩。因此,他们使用该界面向他们的朋友发送邀请。结果是,didFindMatch我的代表用一个GKMatch有 4 个参与者的方式调用了它。它应该只有2个!第一个参与者是本地玩家,其他 3 人的状态为“匹配”。所以,他们的朋友甚至不在名单上。有没有人有任何解决这个问题的建议?相同的代码在 iOS 10 之前的 iOS 版本中运行良好。

0 投票
1 回答
127 浏览

ios - 游戏中心沙盒问题

我遇到了一个非常古老的问题,这里已经讨论过很多次了。尽管多次讨论这个问题,但我没有找到可以接受的解决方案,所以我决定再次提出这个问题。

所以,问题。我正在尝试测试回合制比赛。我为此使用了两个真实的设备。我打开第一台设备,匹配数据更新没有错误(我肯定知道),但有时第二台设备没有收到任何通知,似乎第一台设备仍在转弯。有时它会按预期工作。

换句话说player(_:receivedTurnEventFor:didBecomeActive),有时不会调用方法。但是,如果我关闭第二台设备上的应用程序,重新打开它并加入现有的比赛,一切正常。据我了解,这是众所周知的 Game Center Sandbox 问题,但在我尝试测试应用程序时它让我发疯。有谁知道如何解决?或者也许有一个最佳实践如何使用这种奇怪的沙盒行为来运行和测试应用程序?

更新。Thunk 提出的方法是一种解决方案。我用 Swift 重写了它并修改为符合我的游戏逻辑。首先,我定义了全局变量 var gcBugTimer: Timer

endTurn(withNextParticipants:turnTimeOut:match:completionHan‌​dler:)完成处理程序中:

上面的代码也应该被调用,以防玩家对新的比赛和其他玩家感到高兴。

然后定时器方法:

我在开头添加了以下代码player(_:receivedTurnEventFor:didBecomeActive)

0 投票
1 回答
71 浏览

ios - 如何在玩家从 GKTurnBasedMatchmakerViewController 中“移除”正在进行的比赛时收到通知

我正在使用默认的GKTurnBasedMatchmakerViewController. 玩家可以通过向左滑动匹配单元格然后点击红色的“删除”按钮来“删除”正在进行的匹配。但这不会通知其他玩家第一个玩家已经移除(并退出)比赛。另一个继续等待另一名玩家加入比赛并转弯。但这违背了我的游戏逻辑。我想在任何玩家退出比赛或移除比赛后立即结束比赛。有没有办法为matchOutcome想要删除比赛的玩家接收任何类型的回调或设置?感谢帮助。

0 投票
1 回答
58 浏览

ios - 如何实际启动 GKTurnBasedMatch 以便我可以发送交换?

我正在尝试向 GKTurnBasedMatch 中的另一位玩家发送交换。当我发送它时,我的完成处理程序会收到一条大错误消息,其中包含以下描述:

我希望比赛在只有两名球员时开始,但总共允许 16 名球员。所以我很自然地设置maxPlayers = 16and minPlayers = 2。我原以为一旦两名球员就座,比赛就会自动开始,但事实并非如此。

一旦比赛有两名球员,我就尝试这样做:

但后来我被告知这status是只读的。我不能手动设置它。

现在,有了一个常规的GKMatch,我通过调用正式开始比赛:

但似乎没有类似的东西GKTurnBasedMatch

我如何真正开始比赛,以便我可以在两个玩家之间进行交流?