Tag: gkturnbasedmatch

GKTurnBasedEventListener不能被设置为我的ViewController的委托?

在objC中, Rawendrich为GKTurnBasedEventListener编写的语法,当时是GKTurnBasedEventHandler ,现在由Apple改为如下。 if (!gameCenterAvailable) return; void (^setGKEventHandlerDelegate)(NSError *) = ^ (NSError *error) { GKTurnBasedEventHandler *ev = [GKTurnBasedEventHandler sharedTurnBasedEventHandler]; ev.delegate = self; }; NSLog(@"Authenticating local user…"); if ([GKLocalPlayer localPlayer].authenticated == NO) { [[GKLocalPlayer localPlayer] authenticateWithCompletionHandler: setGKEventHandlerDelegate]; } else { NSLog(@"Already authenticated!"); setGKEventHandlerDelegate(nil); } 现在把这个转换成swift之后,写下GKTurnBasedEventListener而不是GKTurnBasedEventHandler ,这是以下方法。 // Converted with Swiftify v1.0.6381 – https://objectivec2swift.com/ if !gameCenterAvailable { […]

如何识别出现为空括号的空NSData对象?

我正在处理Game Kit的GKTurnBasedMatch类中的腐败问题(请参阅此线程 ),有时会导致游戏状态无效,并且matchData损坏。 所以作为一个解决方法,我正在创build一个方法来识别这些无效匹配,所以我可以适当地处理它们。 损坏的matchData似乎是一个很好的方法来做到这一点。 但是,到目前为止,我一直无法识别他们。 当我这样做: // "match" is an existing GKTurnBasedMatch object NSLog(@"match data is: %@",[match matchData]); NSLog(@"match data is nil? %@",[match matchData] == nil ? @"YES" : @"NO"); NSLog(@"match data equals empty nsdata? %@",[match matchData] == [NSData data] ? @"YES" : @"NO"); 我得到以下内容: match data is: <> match data is nil? NO […]

处理邀请GKTurnBasedMatch没有游戏中心视图控制器

我正在做一个简单的基于回合的文字游戏,我很难搞清楚邀请函是如何工作的。 当用户A邀请用户B参加游戏时,我希望用户B能够在我的自定义比赛界面(即,列出所有用户B的游戏的屏幕)中看到该游戏。 如果用户B被邀请参加游戏时点击通知,事情就没有问题,但是如果用户B自己导航到应用程序,我仍然希望通过自己的界面可以看到游戏。 每当此匹配界面屏幕出现时,我正在使用[GKTurnBasedMatch loadMatchesWithCompletionHandler:]获取所有本地玩家的匹配。 有了这个,我会假设用户B能够看到他被邀请的比赛,但是这个新的比赛没有出现。 如果我通过GKTurnBasedMatchmakerViewController接受邀请,则用户按照预期进入游戏,但是更让人费解的是,如果我打开了我的GKTurnBasedMatchmakerViewController ,然后在不接受邀请的情况下取消,现在会在我的自定义匹配中显示新的匹配接口,但它缺less用户A发送的匹配数据。 总之,我真的只是想知道如何正确显示和接受GKTurnBasedMatch邀请与自定义接口(而不是必须使用GKTurnBasedMatchmakerViewController )。 谢谢!

IOS游戏中心GKLocalPlayerListener

我试图在回合制游戏中实现一个事件监听器,所以玩家可以在轮到他时或朋友邀请时接收事件。 GKTurnBasedEventHandler在IOS 7中被弃用,我读了我应该使用GKLocalPlayerListener的文档; 但这是它的延伸。 有没有人使用过它,因为没有任何信息。 这是我之前所尝试的,它不起作用。 – (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer]; [localPlayer authenticateWithCompletionHandler:^(NSError *error) { if (localPlayer.isAuthenticated) { GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer]; [localPlayer registerListener:self]; } }]; return YES; } -(void)handleInviteFromGameCenter:(NSArray *)playersToInvite { NSLog(@"test"); } – (void)player:(GKPlayer *)player receivedTurnEventForMatch:(GKTurnBasedMatch *)match didBecomeActive:(BOOL)didBecomeActive { NSLog(@"test"); }

handleTurnEventForMatch:didBecomeActive:仅在某些时间到达的callback

这是这个问题的后续。 如果您没有收到处理handleTurnEventForMatch:didBecomeActive: 任何callback,请尝试在那里find答案。 在我的游戏中,我只是在一些时间接收转向事件通知。 但是,如果我回到matchMakerViewController并重新加载匹配,状态总是正确的。 我的游戏在每个回合中都会多次上传转弯状态。 有意思的是,如果其他装置收到一个对手回合的通知,则不太可能在相同回合中接收到进一步的通知。 但是,这不是100%。 一般来说,我的互联网连接似乎工作得很好。 任何想法可能是什么原因造成的?

我如何回复GKTurnBasedExchange? GKLocalPlayerListener委托receivedExchangeReplies被间歇调用

有一些post讨论了Game Center的推送通知在沙盒中是如何相当不可靠的。 但是,沙箱是用iOS 9混淆,所以我不知道为什么我的游戏中心推送通知是如此不可靠。 当我回复主动交换时,发送者很less被通知。 [exchange replyWithLocalizableMessageKey:@"EXCHANGE_REPLY" arguments:@[] data:data completionHandler:^(NSError *error) { if (error) { NSLog(@""); } }]; 在发件人设备上,如果我刷新匹配数据,我会看到待处理的答复。 如果我处理答复,一切正常。 这个方法也是一样的: – (void)sendExchangeToParticipants:(NSArray<GKTurnBasedParticipant *> *)participants data:(NSData *)data localizableMessageKey:(NSString *)key arguments:(NSArray<NSString *> *)arguments timeout:(NSTimeInterval)timeout completionHandler:(void(^__nullable)(GKTurnBasedExchange *exchange, NSError *error))completionHandler 在这一点上,我想我最好的select是运行我自己的推送通知逻辑触发更新匹配数据。 这或我读过发送提醒更可靠,但我相信有限制周围的限制。 更新 我试过只使用设备而不是模拟器。 同样的问题。 看起来这是一个相当有名的问题。 甚至在第766页的这本书中都有提到。 更新 发送提醒没有帮助。 更新 通常在回复交易时,我会从GameKit得到这个错误。 The connection to service named com.apple.gamed was […]