标签: gamekit

如何以编程方式检测Game Center?

我正在为游戏添加Game Center支持.因为我的游戏可以在iOS版本上运行回3.0,所以我想让它在没有Game Center的情况下在本地保存成就和排行榜.

现在,我有这个:

+ (BOOL) isGameCenterAvailable {
 Class playerClass = NSClassFromString( @"GKLocalPlayer" );
 if( playerClass != nil && [playerClass localPlayer] != nil ) {
  DebugLog( @"Game Center is available" );
  return YES;
 }

 DebugLog( @"Game Center is NOT available" );
 return NO;
}
Run Code Online (Sandbox Code Playgroud)

但是,这似乎根本不起作用.首先,尽管GKLocalPlayer参考声明此类在iOS 4.1及更高版本中可用,但上述测试在iOS 4.0中通过(我没有尝试早期版本).另外,测试还传递了具有iOS 4.1但不支持Game Center的设备(例如,iPhone 3G).

我已经在线浏览了各种GameKit和游戏中心文档,并且没有任何运气可以解决这个问题.我当然可以检测到操作系统版本,但这似乎很蹩脚.对于不支持的硬件(如3G)的情况,这也无济于事.我想也可以检测到这一点,但是再次看起来有点蹩脚.

以编程方式检测Game Center支持的"正确方法"是什么?

iphone objective-c gamekit ios4 ios

4
推荐指数
1
解决办法
1652
查看次数

客户端/服务器GKSessions

我有一个设置的应用程序,这样如果用户选择设备作为服务器,它会在服务器模式下创建一个GKSession,如果它选择了cient,它会在客户端模式下创建一个GKSession.

目前发生的事情是服务器正在发送数据,这只是一个包含服务器时间的字符串.

然而,问题开始,当我有一个客户端已经连接到服务器然后我连接另一个客户端..问题是:第二个连接的客户端由于某种原因也连接到第一个客户端.

我希望能够不连接到其他客户端,只需连接到服务器.任何帮助都会很棒

iphone objective-c gamekit

4
推荐指数
1
解决办法
5604
查看次数

使应用程序类似于Talking Tom Cat

我想制作类似于会说话的汤姆猫,触摸宠物猫/,虚拟猴子和自来水动物园的应用程序.

我对Iphone基本动画有所了解.

我想知道我可以在没有OpenGL,cocos和其他游戏环境的情况下制作这些应用程序...我可以通过仅使用基本框架来制作它...

iphone objective-c gamekit ios

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

更改GKTurnBasedMatch的"轮到你"和"游戏结束"通知中的文字?

我正在使用GameKit和GKTurnBasedMatch实现基于回合制的多人游戏.当游戏结束时,玩家会收到"游戏结束"通知; 当玩家轮到他们时,他们会收到"轮到你"的通知.这些通知使用GKTurnBasedMatch自动发生.

是否可以更改这些通知显示的文本或图标?

notifications multiplayer gamekit ios game-center

4
推荐指数
1
解决办法
686
查看次数

GameKit发送不同的分数类型

我有一个有5种不同游戏模式的应用程序,其中3个有整数分数,其中2个有基于时间的分数(他们完成游戏的速度有多快).

如何设置我的reportScore:方法,以便我在iTunes Connect中设置的排行榜(以最低到最高时间格式显示高分数到百分之一秒)将以时间格式收到用户的分数?

我想把它作为一个发送NSTimeInterval.

Apple Docs指定的方法仅接受整数作为分数:

- (void) reportScore: (int64_t) score forCategory: (NSString*) category
{
    GKScore *scoreReporter = [[GKScore alloc] initWithCategory:category];
    scoreReporter.value = score;

    [scoreReporter reportScoreWithCompletionHandler:^(NSError *error) {
        if (error != nil)
        {
            //handle the score to submit again later
        }
    }];
}
Run Code Online (Sandbox Code Playgroud)

UPDATE

我已经做了这方面的一些研究,我知道,你只能发送分数游戏中心排行榜作为int64_t.那么,如何格式化这个整数,使我的排行榜将其格式化为一个时间到百分之一秒?

谢谢你的帮助!

objective-c gamekit ios game-center

4
推荐指数
1
解决办法
666
查看次数

Game Center Quickmatch:随机匹配对手(GKTurnBasedMatch)

我希望在我的回合制游戏中有一个"快速匹配"模式,玩家可以自动匹配第一个可用的玩家.我正在使用自己的自定义UI.到目前为止,我的代码如下所示:

- (void)quickMatch {
  GKMatchRequest *request = [[GKMatchRequest alloc] init];
  request.minPlayers = 2;
  request.maxPlayers = 2;
  request.playersToInvite = nil;
  [GKTurnBasedMatch findMatchForRequest:request withCompletionHandler:^(GKTurnBasedMatch *match, NSError *error) {
    NSLog(@"MATCH: %@ %@ %@ %d",error,match,match.matchID,(int)match.status);
  }];
Run Code Online (Sandbox Code Playgroud)

这成功创建了一个匹配项,但匹配中的第二个参与者具有nullID(playerID:(null) status:Matching).

如果我在另一个实例上运行相同的代码,使用不同的Game Center ID,那么这两个用户将相互匹配......但这似乎不正确.每当我调用该GKTurnBasedMatch loadMatchesWithCompletionHandler函数时,我会继续检索相同的匹配,每个匹配只有1个有效参与者(本地播放器).

此问题似乎与iOS开发类似:如何在Game Center中自动匹配玩家?这表明设置request.playersToInvite = nil;应该完成自动匹配,但这似乎并不适合我.

如何让Game Center自动匹配这些玩家?

iphone gamekit game-center

4
推荐指数
1
解决办法
752
查看次数

在哪里可以找到导出的GameKit日志文件?

在iOS上,您可以从设置应用程序中导出GameKit日志文件.但是它无法告诉您在哪里可以找到这些日志文件.您也无法从Xcode->设备查看它们.

logging gamekit

4
推荐指数
1
解决办法
1051
查看次数

GameKit蓝牙传输问题

我正在尝试使用GameKit框架通过蓝牙发送文件.我遇到的问题是我一次只能发送一个NSData对象,但我需要在另一端保存它.如果不知道文件名,这显然是不可能的,但我不知道如何传输它.我试图将它转换为字符串, NSData*data = [NSData dataWithContentsOfFile:urlAddress];但我只能发送一个NSData对象,而不是两个.

有人遇到过这个问题吗?

iphone cocoa bluetooth gamekit

3
推荐指数
1
解决办法
4392
查看次数

如何符合定义具有相同名称和不同签名的方法的两个协议?

我正在使用iOS7的新功能MultipeerConnectivity.它配备了一个功能didChangeState:

在ViewController.h中,

#import <GameKit/GameKit.h>
#import <MultipeerConnectivity/MultipeerConnectivity.h>
@interface ViewController : UIViewController <GKPeerPickerControllerDelegate, GKSessionDelegate, MCBrowserViewControllerDelegate, MCSessionDelegate>
Run Code Online (Sandbox Code Playgroud)

在ViewController.m中,需要以下两种方法来实现:

- (void)session:(MCSession *)session peer:(MCPeerID *)peerID didChangeState:(MCSessionState)state{ ...... }
Run Code Online (Sandbox Code Playgroud)

//名称与iOS6 Gamekit功能重复:

- (void)session:(GKSession *)session peer:(NSString *)peerID didChangeState:(GKPeerConnectionState)state { ...... }
Run Code Online (Sandbox Code Playgroud)

由于iOS不支持函数重载,我应该如何在同一个程序中包含这两个函数?它编译失败.错误:方法'session的重复声明:peer:didChangeState:'我正在使用最新的XCode 5.0.1.

overloading objective-c gamekit ios

3
推荐指数
1
解决办法
438
查看次数

Swift显示游戏中心排行榜

现在我正试图让我创建的排行榜显示出来.玩家的身份验证很好,但是当游戏中心窗口打开时,这很奇怪.这是一张图片:

在此输入图像描述

这是我用来显示此图像的代码:

 override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
        self.showLeaderboard()
    }
    func showLeaderboard() {
        var leaderView = UIViewController()

       var leaderViewController = GKGameCenterViewController(rootViewController: leaderView)
         leaderViewController.viewState = GKGameCenterViewControllerState.Leaderboards
       leaderViewController.leaderboardIdentifier = "High_Score_Board"
       self.showViewController(leaderViewController, sender: self)
        //self.presentViewController(leaderViewController, animated: true, completion: nil)

    }
    func leaderboardViewControllerDidFinish(controller: GKGameCenterViewController){
        controller.dismissViewControllerAnimated(true, completion: nil)
    }
Run Code Online (Sandbox Code Playgroud)

所有这些都在我的GameViewController中.此外,即使这样可行,我如何在SKScenes中访问此方法?谢谢您的帮助!

gamekit ios game-center sprite-kit swift

3
推荐指数
1
解决办法
1543
查看次数