gpt4 book ai didi

ios - 未调用 GKLocalPlayerListener 协议(protocol)

转载 作者:搜寻专家 更新时间:2023-10-30 22:17:49 27 4
gpt4 key购买 nike

正如苹果指南所说;我在我的游戏中心类中实现了 GKLocalPlayerListener 协议(protocol),并在本地玩家通过身份验证后立即将其添加为监听器:

func authenticationChanged() {
if (GKLocalPlayer.localPlayer().authenticated && !self.userAutenticated) {
println("Authentication changed: player authenticated.")
userAutenticated = true
GKLocalPlayer.localPlayer().unregisterAllListeners()
GKLocalPlayer.localPlayer().registerListener(self)
} else if (GKLocalPlayer.localPlayer().authenticated && self.userAutenticated) {
println("Authentication changed: player not authenticated.")
userAutenticated = false
}
}

协议(protocol)实现:

// MARK: - GKLocalPlayerListener
func player(player: GKPlayer!, didAcceptInvite invite: GKInvite!) {
println("Did accept invite")
}
func player(player: GKPlayer!, didRequestMatchWithRecipients recipientPlayers: [AnyObject]!) {
println("Did request matchmaking")
}

当我尝试邀请 friend 时,这 2 种方法都没有被调用,而且我也没有收到任何类型的通知。我试图在 Release模式下测试游戏,但我得到了相同的结果。我必须说正常的配对工作正常,我能够毫无问题地找到玩家一起玩。

编辑:

如果我从 2 台设备测试它,将收到通知,但如果我点击通知,应用程序将打开并且不会调用任何委托(delegate)。如果我关闭应用程序并再次重新启动它,则会调用 GKLocalPlayerListener

怎么了??

最佳答案

我假设,当您说“正常的配对工作”时,您已经展示了一个媒人 View Controller :

-(IBAction)setupMatch:(id)sender{
GKMatchmakerViewController *matchViewController = [[GKMatchmakerViewController alloc] initWithMatchRequest:matchRequest];
matchViewController.matchmakerDelegate = self;
[self presentViewController:matchViewController animated:YES completion:nil];}

然后当在 matchmakerviewcontroller 中找到玩家时,将调用 didFindMatch:

-(void)matchmakerViewController:(GKMatchmakerViewController *)viewController didFindMatch:(GKMatch *)match{
//Called when GameCenter completes the matchmaking process
match.delegate = (id)self; //etc. lots of your own code here.

didAcceptinvite 仅在邀请接收者接受邀请后在其设备上调用:

-(void)player:(GKPlayer *)player didAcceptInvite:(GKInvite *)invite{
//Called on the accepting device when the invitation is accepted
GKMatchmakerViewController *mmvc = [[GKMatchmakerViewController alloc] initWithInvite:invite];
mmvc.matchmakerDelegate = self;
[self presentViewController:mmvc animated:YES completion:nil];

这会向您的 friend 展示一个媒人 View Controller 。他们无事可做,vc 建立连接然后自行解散。发件人设备上的 vc 同时消失。

然后在两个设备上调用 didFindMatch 并离开。

我不相信 didrequestMatchWithRecipients 曾经被调用过,当 didFindMatch 和 didAcceptInvite 处理游戏开始时,它似乎是多余的。

我发现来自 WWDC 2012 的这段视频非常有用:WWDC 2012 Christy Warren

关于ios - 未调用 GKLocalPlayerListener 协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31848827/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com