在GKSession中分配给您的设备的peerID对于同一设备是否始终相同?我的意思是,每次创建GKSession时,您的peerID都是同一个?或者每次创建GKSession时都会分配一个随机的?这个peerID是如何生成的?
谢谢!
这让我发疯,我只是找不到问题:
我在模拟器上的游戏中心崩溃,在设备上它的工作完美.当我调用以下代码时崩溃:
[[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.
任何想法将不胜感激.
谢谢
我正在使用Game Kit将两个玩家添加到游戏中.我的测试设备是运行4.3.5的第三代iPod touch和运行4.2.1的第二代iPod touch.两个设备上都启用了游戏中心通知.我没有使用iPhone模拟器.这两个设备都使用单独的帐户登录到Game Center Sandbox.帐户已经是朋友了.
我可以成功验证localPlayer并启动邀请,但受邀请的设备永远不会收到邀请,并且inviteHandler永远不会调用受邀请的游戏.在inviteHandler被认证后立即设置localPlayer.我已经浏览了游戏套件编程指南并实现了GKMatchmakerViewControllerDelegate协议中的所有方法,但我很难过.
我正在创建一个实时比赛游戏,我对如何处理游戏邀请感到困惑?例如,一个设备上的玩家可以邀请他的朋友参加比赛,然后邀请横幅将出现在朋友的设备上.他们可以点击横幅并接受邀请.现在,如果朋友之前已经运行了应用程序并安装了以下邀请处理程序(安装在应用程序的第二个视图控制器中),这样可以正常工作
- (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) 这是这个问题的后续行动.如果您没有收到任何回调handleTurnEventForMatch:didBecomeActive:,请在那里尝试答案.
在我的游戏中,我只是在某些时候收到转弯事件通知.但如果我回到matchMakerViewController并重新加载比赛,状态总是正确的.
我的游戏在每个回合中多次上传转弯状态.有趣的是,似乎如果其他设备收到对手轮到的一个通知,则不太可能接收到同一回合的进一步通知.但是,这不是100%.
一般来说,我的互联网连接似乎运作良好.
可能导致这种情况的任何想法?
我正在尝试使用自定义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) 我正在处理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.
所以才出现,在某些时候,核心数据是"清洗"的属性,其波普尔零值.我的问题是,在将该值添加到核心数据存储之前,我实际上需要在该点之前将该值标识为 …
如何从排行榜游戏中心获得本地玩家的分数?我尝试了这个代码,但它没有返回任何内容.有人知道如何解决它,或者有更好的方法来获得分数?
- (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:...完成
可能吗?
我正在努力在我的游戏中集成基于回合的比赛,几天前我开始从 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 沙箱中进行测试,几天前它开始发生。以前,我根本没有遇到这个问题。 …
使用这两个框架,我们可以使用蓝牙向session.peers发送消息?
我使用多重连接框架向我的同伴发送消息,但在发送消息和接收之间通常有1.4秒的延迟.
gamekit ×10
ios ×8
game-center ×5
objective-c ×5
iphone ×4
bluetooth ×1
callback ×1
gkmatchmaker ×1
ios7 ×1
nsdata ×1
null ×1
p2p ×1