标签: gamekit

GameKit框架中使用的peerID对于每个设备总是唯一的?

在GKSession中分配给您的设备的peerID对于同一设备是否始终相同?我的意思是,每次创建GKSession时,您的peerID都是同一个?或者每次创建GKSession时都会分配一个随机的?这个peerID是如何生成的?

谢谢!

iphone p2p gamekit

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

iOS:游戏中心在模拟器上崩溃

这让我发疯,我只是找不到问题:
我在模拟器上的游戏中心崩溃,在设备上它的工作完美.当我调用以下代码时崩溃:

[[GKLocalPlayer localPlayer] authenticateWithCompletionHandler:^(NSError *error) {
    if (error) { 
        NSLog(@"An error occured authenticating the local game center player");
        NSLog(@"Error: %@", [error localizedDescription]);      
    }
}];
Run Code Online (Sandbox Code Playgroud)

我已经尝试将部署目标和基本sdk设置为4.3而没有运气.
我已尝试进行呼叫,application:didFinishLaunchingWithOptions:并在玩家点击主屏幕中的"播放"按钮后再进行呼叫.两种情况都是相同的结果.

另外,我没有堆栈跟踪; 它看起来像这样:

0 objc_msgSend
1 < ???? >
Run Code Online (Sandbox Code Playgroud)

我得到了EXC_BAD_ACCESS.

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

iphone objective-c gamekit ios game-center

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

inviteHandler从未打过电话

我正在使用Game Kit将两个玩家添加到游戏中.我的测试设备是运行4.3.5的第三代iPod touch和运行4.2.1的第二代iPod touch.两个设备上都启用了游戏中心通知.我没有使用iPhone模拟器.这两个设备都使用单独的帐户登录到Game Center Sandbox.帐户已经是朋友了.

我可以成功验证localPlayer并启动邀请,但受邀请的设备永远不会收到邀请,并且inviteHandler永远不会调用受邀请的游戏.在inviteHandler被认证后立即设置localPlayer.我已经浏览了游戏套件编程指南并实现了GKMatchmakerViewControllerDelegate协议中的所有方法,但我很难过.

gamekit ios

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

如果朋友在应用程序中没有取得足够的进展来达到installInvitationHandler方法,如何处理游戏中心邀请?

我正在创建一个实时比赛游戏,我对如何处理游戏邀请感到困惑?例如,一个设备上的玩家可以邀请他的朋友参加比赛,然后邀请横幅将出现在朋友的设备上.他们可以点击横幅并接受邀请.现在,如果朋友之前已经运行了应用程序并安装了以下邀请处理程序(安装在应用程序的第二个视图控制器中),这样可以正常工作

- (void) installInvitationHandler
{
    [GKMatchmaker sharedMatchmaker].inviteHandler = ^(GKInvite *acceptedInvite, NSArray *playersToInvite) {
        // Insert game-specific code here to clean up any game in progress.
        if (acceptedInvite)
        {
            if(self.myConnectingVC) return;
            else if(self.myMatchmakerVC)
            {
                [self dismissViewControllerAnimated:YES completion:^{
                    self.myMatchmakerVC = nil;
                    GKMatchmakerViewController *mmvc = [[GKMatchmakerViewController alloc] initWithInvite:acceptedInvite];
                    mmvc.matchmakerDelegate = self;
                    self.myConnectingVC = mmvc;
                    [self presentViewController:mmvc animated:YES completion:nil];
                }];
            }
            else
            {
                GKMatchmakerViewController *mmvc = [[GKMatchmakerViewController alloc] initWithInvite:acceptedInvite];
                mmvc.matchmakerDelegate = self;
                [self presentViewController:mmvc animated:YES completion:nil];
            }
        }
        else if (playersToInvite)
        {
            [self createMatchWithPlayersToInvite:playersToInvite]; …
Run Code Online (Sandbox Code Playgroud)

iphone objective-c gamekit ios game-center

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

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

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

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

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

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

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

notifications callback gamekit ios gkturnbasedmatch

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

iOS游戏中心GameKit程序化邀请匹配

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

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

相关守则:

- (void) findMatch {
  GKMatchRequest *request = [[GKMatchRequest alloc] init];
  request.minPlayers = NUM_PLAYERS_PER_MATCH; //2
  request.maxPlayers = NUM_PLAYERS_PER_MATCH; //2
  if (nil != self.playersToInvite) {
    // we always successfully get in this if-statement
    request.playersToInvite = self.playersToInvite;
    request.inviteeResponseHandler = ^(NSString *playerID, GKInviteeResponse response) {
      [self.delegate updateUIForPlayer: playerID accepted: (response == GKInviteeResponseAccepted)];
  };
}
request.inviteMessage = @"Let's Play!";

[self.matchmaker findMatchForRequest:request withCompletionHandler:^(GKMatch *match, NSError *error) {
  if (error) {
    // Print the error
    NSLog(@"%@", error.localizedDescription);
  } else 
    if (match != nil) { …
Run Code Online (Sandbox Code Playgroud)

objective-c gamekit ios game-center gkmatchmaker

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

如何识别显示为空括号的空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万
查看次数

如何从Game Center获得本地球员得分

如何从排行榜游戏中心获得本地玩家的分数?我尝试了这个代码,但它没有返回任何内容.有人知道如何解决它,或者有更好的方法来获得分数?

- (NSString*) getScore: (NSString*) leaderboardID
{
    __block NSString *score;
    GKLeaderboard *leaderboardRequest = [[GKLeaderboard alloc] init];
    if (leaderboardRequest != nil)
    {
        leaderboardRequest.identifier = leaderboardID;

        [leaderboardRequest loadScoresWithCompletionHandler: ^(NSArray *scores, NSError *error) {
            if (error != nil)
            {
                NSLog(@"%@", [error localizedDescription]);
            }
            if (scores != nil)
            {
                int64_t scoreInt = leaderboardRequest.localPlayerScore.value;
                score = [NSString stringWithFormat:@"%lld", scoreInt];
            }
        }];
    }
    return score;
}
Run Code Online (Sandbox Code Playgroud)

我想,那个方法必须等待[leaderboardRequest loadScoresWithCompletionHandler:...完成

可能吗?

iphone objective-c gamekit game-center ios7

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

GKLocalPlayer 身份验证不起作用,但 isAuthenticated 返回 YES(游戏中心沙箱)

我正在努力在我的游戏中集成基于回合的比赛,几天前我开始从 GameKit API 收到奇怪的错误,说本地玩家没有经过身份验证,即使他是。

当我启动应用程序时,将authenticateHandler调用 ,显示视图控制器,输入密码后,authenticaHandler再次调用 并且本地播放器似乎已通过身份验证。isAuthenticated返回YES

但是一旦我开始使用任何 GameKit API,比如loadFriendsWithCompletionHandler:,就会返回一个错误,指出玩家尚未通过身份验证。

这是用于处理身份验证更改的代码。

[[GKLocalPlayer localPlayer] setAuthenticateHandler:^(UIViewController *viewController, NSError *error) {
    if ([[GKLocalPlayer localPlayer] isAuthenticated]) {
        // Player authenticated
    } else {
        // Player not authenticated

        if (viewController != nil) {
            // Present view controller
        }
    }
}];
Run Code Online (Sandbox Code Playgroud)

这是我在调用任何 GameKit 方法时收到的错误消息。请注意,-isAuthenticated返回错误时仍然返回YES。

查找匹配时出错:Error Domain=GKErrorDomain Code=6 “请求的操作无法完成,因为本地播放器尚未通过身份验证。” UserInfo=0x14e9f950 {NSLocalizedDescription=请求的操作无法完成,因为本地播放器尚未通过身份验证。}
(lldb) print (BOOL) [[GKLocalPlayer localPlayer] isAuthenticated] (BOOL) $3 = YES

我正在 Game Center 沙箱中进行测试,几天前它开始发生。以前,我根本没有遇到这个问题。 …

objective-c gamekit ios game-center

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

在iOS中,Gamekitframework在发送消息方面比多重连接框架更快吗?

使用这两个框架,我们可以使用蓝牙向session.peers发送消息?

我使用多重连接框架向我的同伴发送消息,但在发送消息和接收之间通常有1.4秒的延迟.

bluetooth gamekit ios multipeer-connectivity

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