标签: gkturnbasedmatch

IOS游戏中心GKLocalPlayerListener

我试图在回合制游戏中实现一个事件监听器,这样玩家可以在轮到他或者被朋友邀请时接收.在IOS 7中不推荐使用GKTurnBasedEventHandler,我在文档中读到了我应该使用的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");
}
Run Code Online (Sandbox Code Playgroud)

ios game-center gkturnbasedmatch

9
推荐指数
1
解决办法
2790
查看次数

handleTurnEventForMatch:didBecomeActive:回调只在某些时候到达

这是这个问题的后续行动.如果您没有收到任何回调handleTurnEventForMatch:didBecomeActive:,请在那里尝试答案.

在我的游戏中,我只是在某些时候收到转弯事件通知.但如果我回到matchMakerViewController并重新加载比赛,状态总是正确的.

我的游戏在每个回合中多次上传转弯状态.有趣的是,似乎如果其他设备收到对手轮到的一个通知,则不太可能接收到同一回合的进一步通知.但是,这不是100%.

一般来说,我的互联网连接似乎运作良好.

可能导致这种情况的任何想法?

notifications callback gamekit ios gkturnbasedmatch

7
推荐指数
1
解决办法
950
查看次数

如何识别显示为空括号的空NSData对象?

我正在处理Game Kit的GKTurnBasedMatch类中的损坏问题(请参阅此主题),这有时会导致游戏状态无效,matchData损坏.

因此,作为一种解决方法,我正在创建一种方法来识别这些无效匹配,以便我可以适当地处理它们.损坏的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");
Run Code Online (Sandbox Code Playgroud)

我得到以下内容:

match data is: <>
match data is nil? NO
match data equals empty nsdata? NO
Run Code Online (Sandbox Code Playgroud)

所以匹配数据显示为一对空括号"<>",我希望可以将其标识为零,但显然不是.

顺便说一句,我将此matchData存储在NSData属性下的核心数据实体中.当我保存NSManagedObjectContext,然后NSLog NSManagedObject查看其中的内容时,有问题的NSData属性显示为"<>"!

但是,如果我然后创建一个新的 NSManagedObjectContext,从中检出相同的NSManagedObject,然后 NSLog其值,NSData属性现在显示为nil.

所以才出现,在某些时候,核心数据是"清洗"的属性,其波普尔值.我的问题是,在将该值添加到核心数据存储之前,我实际上需要在该点之前将该值标识为 …

null nsdata gamekit ios gkturnbasedmatch

7
推荐指数
1
解决办法
1万
查看次数

GKTurnBasedMatch推送通知非常不一致

我正在测试两个设备之间的回合制游戏.据我了解,[GKTurnBasedMatch endTurnWithNextParticipants:]例如,发送转弯应自动将游戏中心通知推送给对手.有时,这可以正常工作:转弯发送,并立即在另一台设备上显示横幅通知.一切都很好.

令我困惑的是,其他时候,即使转弯本身发送正确(我可以告诉,因为当对手刷新比赛时,比赛是最新的),没有推送通知进来.

我的理解在这里有什么漏洞吗?如果我理解正确,不一致的通知不应该与我的代码有任何关系,因为这里的问题不是我处理通知的方式,而是根本没有通知.换句话说,[handleTurnEventForMatch:](一种GKTurnBasedEventHandlerDelegate方法)与它没有任何关系(我不认为)因为如果没有收到任何通知,它就永远不会被调用.

所以,我只是想知道是否有人对此有任何经验.这是否可能是由于我的代码中的某些内容?或者,游戏中心沙箱是否可能导致不一致,我无能为力呢?

任何想法或想法将不胜感激.

iphone push-notification ios game-center gkturnbasedmatch

6
推荐指数
1
解决办法
766
查看次数

GKTurnBasedMatch参与者不正确/重复

我正在开发基于回合制的GameCenter游戏.A GKTurnBasedMatch创建时使用a GKMatchRequest,with minPlayersmaxPlayers设置为2.我会NSInvalidArgumentException尝试结束游戏endMatchInTurnWithMatchData,并告诉我没有设置matchOutcome所有参与者.在此点之前记录匹配对象会显示我的匹配如下所示:

<GKTurnBasedMatch 0x1c1f2af0 - matchID:c9de6e47-0e9a-4dbe-944b-d2fd4ecd3044 bundleID:com.mybundle.wd status:GKTurnBasedMatchStatusEnded message:'Game Over' creationDate:2013-10-08 01:26:12 +0000 currentParticipant:(null) participants:
<GKTurnBasedParticipant 0x1c184820 - playerID:G:128458444 (local player) status:Done matchOutcome:Lost lastTurnDate:2013-10-10 21:54:22 +0000 timeoutDate:(null)>,
<GKTurnBasedParticipant 0x1c1b0a80 - playerID:G:220673962 status:Done matchOutcome:Lost lastTurnDate:2013-10-10 18:26:16 +0000 timeoutDate:(null)>,
<GKTurnBasedParticipant 0x16ef1610 - playerID:G:128458444 (local player) status:Active matchOutcome:None lastTurnDate:(null) timeoutDate:(null)>,
<GKTurnBasedParticipant 0x16ec64f0 - playerID:(null) status:Matching matchOutcome:None lastTurnDate:(null) timeoutDate:(null)> matchData.length:871 matchDataMaximumSize:65536 exchanges:(null)>
Run Code Online (Sandbox Code Playgroud)

GKTurnBasedParticipants这里有2个以上,其中两个是同一个玩家!我在游戏中没有做任何特别的事情,除了每回合调用以下内容:

[match endTurnWithNextParticipants:@[nextParticipant] turnTimeout:GKTurnTimeoutDefault matchData:data completionHandler:^(NSError *error){...}] …
Run Code Online (Sandbox Code Playgroud)

objective-c gamekit gkturnbasedmatch ios7

6
推荐指数
1
解决办法
405
查看次数

玩家:receivedTurnEventForMatch:didBecomeActive:不一致/很少发生火灾

我目前正在使用Game Center Sandbox测试我的Game Center Aware App,其中一个实例在iOS模拟器上运行,另一个在Retina iPad Mini上运行.我有一个需要接收转弯事件的视图控制器,所以我实现了该方法

player:receivedTurnEventForMatch:didBecomeActive:
Run Code Online (Sandbox Code Playgroud)

在我的UIViewController子类采用的GKLocalPlayerListener协议中,然后使用此行注册事件

[[GKLocalPlayer localPlayer] registerListener: self];
Run Code Online (Sandbox Code Playgroud)

在视图控制器的init方法中.然而,尽管游戏中心应用程序说游戏的两个实例已连接,但这种方法很少在iPad上调用,我不认为我曾经见过模拟器实例调用它.但是,转到Game Center App会显示两个实例都已更新,表明两个实例都能够接收事件.可能是什么导致了这个?

objective-c ios game-center gkturnbasedmatch

6
推荐指数
1
解决办法
713
查看次数

在没有游戏中心视图控制器的情况下处理GKTurnBasedMatch的邀请

我正在研究一个简单的回合制文字游戏,我很难搞清楚邀请是如何工作的.当用户A邀请用户B参加游戏时,我希望用户B能够在我的自定义匹配界面(即列出所有用户B的游戏的屏幕)中看到该游戏.如果用户B在被邀请参加游戏时点击通知,情况会很好,但如果用户B只是自己导航到应用程序,我仍然希望通过我自己的界面看到游戏.

每当出现这个匹配界面屏幕时,我都会[GKTurnBasedMatch loadMatchesWithCompletionHandler:]用来获取所有本地玩家的比赛.有了这个,我会假设用户B能够看到他被邀请参加的比赛,但这个新比赛没有出现.如果我通过该接受邀请GKTurnBasedMatchmakerViewController,则用户按预期进入游戏,但更令人费解的是,如果我打开我的GKTurnBasedMatchmakerViewController然后取消而不接受邀请,现在我的自定义匹配界面中会出现一个新的匹配,但它缺少用户A发送的匹配数据.

总而言之,我真的只是想知道如何GKTurnBasedMatch使用自定义界面正确显示和接受邀请(而不是必须使用GKTurnBasedMatchmakerViewController).谢谢!

iphone gamekit ios game-center gkturnbasedmatch

5
推荐指数
1
解决办法
750
查看次数

iOS游戏中心 - 频繁的CONNECTION INTERRUPTED消息

我正在使用GKTurnBasedMatch开发iOS游戏中心游戏.每次轮回不完整,控制台中都会出现如下信息:

2013-04-26 19:26:45.115 AppName[6439:5a9f] CONNECTION INTERRUPTED
Run Code Online (Sandbox Code Playgroud)

有趣的是,当我发送一个完整的转弯时,这不会发生

[match endTurnWithNextParticipants: nextParticipants turnTimeout:100000 matchData: data completionHandler:^(NSError* error){
    // some block here
}];
Run Code Online (Sandbox Code Playgroud)

但是当我发送一个不完整的转弯时确实会发生

[match saveCurrentTurnWithMatchData:data completionHandler:^(NSError* error) {
     // some block here
}];
Run Code Online (Sandbox Code Playgroud)

其他人在这里报告了类似的问题:Spurious Game Center播放器断开连接消息.但是,很难看出那里唯一的答案如何适用于我的情况,因为我正在使用GKMatchmakerViewController创建匹配.

connection ios game-center gkturnbasedmatch

5
推荐指数
0
解决办法
486
查看次数

Gamecenter ios 9 GameCenter GKLocalPlayerListener方法未调用

这是关于GameCenter.

由于"的GKLocalPlayerListener协议继承方法GKChallengeListener,GKInviteEventListenerGKTurnBasedEventListener.

为了处理多个事件"和"没有实现GKChallengeListener,GKInviteEventListenerGKTurnBasedEventListener直接; GKLocalPlayerListener而实施.

您可以使用GKLocalPlayerListener"(这些来自Apple文档)来监听和处理多个事件.

可以预期,在经过身份验证之后注册GKLocalPlayerListener之后,当适当的事件发生时,将调用其中的GKLocalPlayer.localPlayer()所有方法GKLocalPlayerListener.

但是,除了"播放器(player:GKPlayer,receivedTurnEventForMatch match:GKTurnBasedMatch,didBecomeActive:Bool)"之外,所有其他方法,包括"player(player:GKPlayer,matchEnded match :) GKTurnBasedMatch"在发生此类事件时都不会被调用.

我们需要注册一些其他听众还是我缺少一些东西?

ios game-center gkturnbasedmatch swift

5
推荐指数
1
解决办法
844
查看次数

如何为玩家列出所有可用的 GKTurnBasedMatches?

我正在使用 Game Center 的回合制比赛构建游戏。

我想显示所有可用匹配项的列表。我试过使用loadMatchesWithCompletionHandler(),但游戏数组返回为nil,错误也返回为nil。有一些正在进行的比赛。

这是我到目前为止:

func authenticateLocalUser() {
    if !gameCenterAvailable { return }

    let player = GKLocalPlayer.localPlayer()
    if player.authenticated == false {
        player.authenticateHandler = {(viewController, error) -> Void in
            if viewController != nil && self.presentingViewController != nil
            {
                self.presentingViewController!.presentViewController(viewController!, animated: true, completion: {
                    GKLocalPlayer.localPlayer().registerListener(self)

                    GKTurnBasedMatch.loadMatchesWithCompletionHandler({games, error in
                        print(games)
                        if games != nil {
                            print(games!.count)
                        }else {
                            print(error)
                        }
                    })
                })
            } else {

                if player.authenticated == true {
                    GKLocalPlayer.localPlayer().registerListener(self)

                    GKTurnBasedMatch.loadMatchesWithCompletionHandler({games, error in
                        print(games) …
Run Code Online (Sandbox Code Playgroud)

ios game-center gkturnbasedmatch

5
推荐指数
1
解决办法
203
查看次数