标签: gamekit

GameKit:GKSession手册

我想使用GKSession连接两个设备,一个作为服务器启动,另一个作为客户端启动.使用此配置,我无法使用GKPeerPickerController.

我在连接两台设备时遇到问题:

  • 仅使用蓝牙:不可能
  • 使用WiFi:至少在设备之间有一些数据交换但没有成功连接.

在接口文件中我有

GKSessionDelegate
GKSession *session;
Run Code Online (Sandbox Code Playgroud)

在实现中,我使用以下代码启动服务器:

session = [[GKSession alloc] initWithSessionID:@"iFood"  displayName:nil sessionMode:GKSessionModeClient];
session.delegate = self;
session.available = YES;
Run Code Online (Sandbox Code Playgroud)

客户端开始使用此代码:

session = [[GKSession alloc] initWithSessionID:@"iFood"  displayName:nil sessionMode:GKSessionModeServer];
session.delegate = self;
session.available = YES;
Run Code Online (Sandbox Code Playgroud)

我如何强制使用蓝牙而不是WiFi?

我也实现了这些调用:

-(void)session:(GKSession *)session didReceiveConnectionRequestFromPeer:(NSString *)peerID {
NSLog(@"Someone is trying to connect"); 
}

- (BOOL)acceptConnectionFromPeer:(NSString *)peerID error:(NSError **)error {
NSLog(@"acceptConnectionFromPeer");
}
Run Code Online (Sandbox Code Playgroud)

当我开始时,我将其纳入调试器:

Listening on port 50775
2010-02-19 14:55:02.547 iFood[3009:5103] handleEvents started (2)
Run Code Online (Sandbox Code Playgroud)

当其他设备开始查找时,我得到了这个:

~ DNSServiceBrowse callback: Ref=187f70, Flags=2, IFIndex=2 (name=[en0]), ErrorType=0 name=00eGs1R1A..Only by Audi …
Run Code Online (Sandbox Code Playgroud)

iphone gamekit

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

iOS 开发:收到 Game Center 邀请时,如何获取 GKMatch 对象?

我正在构建一个使用 Game Center 的 iPhone 游戏,我很难理解如何开始一个通过收到朋友的邀请开始的比赛游戏。该文档说,这...

当应用程序直接从另一个玩家收到邀请时,acceptedInvite 参数非零。在这种情况下,其他玩家的应用程序已经创建了匹配请求,因此您的应用程序的这个副本不需要创建一个。

据此,我不需要创建匹配请求,因为进行邀请的玩家已经创建了一个。如果是这样,我如何获取向/从其他玩家发送/接收数据所需的 GKMatch 对象?我知道获取 GKMatch 对象的唯一方法是创建一个匹配请求并调用该findMatchForRequest方法,文档说我不应该这样做。

他们为此拥有的唯一代码示例涉及创建和使用GKMatchmakerViewController,我无法使用它,因为我正在创建自己的自定义视图。

非常感谢你的智慧!

iphone gamekit ipad ios game-center

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

GKTurnBasedParticipant信息

有没有办法从GKTurnBasedParticipant对象中检索玩家的名字?根据班级参考,除了丑陋的玩家ID之外,似乎无法显示有关游戏玩家的相关信息.或者我错过了什么?

谢谢...

iphone objective-c gamekit ios game-center

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

如何在iOS 7上使用游戏中心创建实时比赛?

你们知道任何教程或代码示例,包括使用iOS 7上的Game Center创建实时比赛吗?

所有Apple示例代码均来自2011(!),他们的文档不完整且含糊不清,并且还在谈论iOS 6.我在网上找到的所有教程都是针对iOS 6的,它们不包括实时匹配.显然苹果并不关心这一点.

有什么建议吗?

iphone gamekit ipad ios

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

通过GameKit将游戏数据保存到iCloud中

我正在尝试通过下一个代码将游戏数据保存到iCloud:

GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
[localPlayer saveGameData:[NSData dataWithBytes:rawData->data() length:rawData->size()]
                 withName:[NSString stringWithUTF8String:fileName.c_str()]
        completionHandler:^(GKSavedGame *savedGame, NSError *error) {
            if (error == nil) {
                DebugLog(@"Snapshot successfully saved");
            } else {
                DebugLog(@"saveSnapshot error: %@", error.description);
            }
        }];
Run Code Online (Sandbox Code Playgroud)

但收到错误消息: The requested operation could not be completed because you are not signed in to iCloud

我试过在iOS模拟器和设备上做这个但是没有成功.
并尝试使用测试苹果ID,开发苹果ID,新苹果ID,但也没有成功.
用户在iOS设置中登录iCloud并登录到Game Center.

有什么建议?

gamekit ios icloud

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

永远不会调用GKGraphNode costToNode方法的子类

我试图将GKGraphNode2D子类化为包含不同地形的不同惩罚(在costToNode方法中).当我用新的子类数组创建一个新的GKGraph并在GKGraph上调用findPathFromNode时,它会完全忽略我的costToNode方法.

代码如下:

public class PenaltyGraphNode: GKGraphNode2D {

    public let penalty: Float

    init(position: CGPoint, penalty: Float) {
        self.penalty = penalty
        let point = vector_float2(Float(position.x), Float(position.y))
        super.init(point: point)
    }

    override public func costToNode(node: GKGraphNode) -> Float {

        guard let penaltyNode = node as? PenaltyGraphNode else { return super.costToNode(node) }

        return super.costToNode(node) * (1 + penaltyNode.penalty)
    }
}
Run Code Online (Sandbox Code Playgroud)

我试图使用GKGraph(为了简洁起见删除了节点创建):

let penaltyNodes: [PenaltyGraphNode] = [penaltyNode1, penaltyNode2, ...]

let graph = GKGraph(nodes: penaltyNodes)
let path = graph.findPathFromNode(startNode, toNode: endNode) as? [PenaltyGraphNode]
Run Code Online (Sandbox Code Playgroud)

我的子类中的costToNode永远不会被调用,我确保我在图中创建并稍后添加到它的所有节点都是PenaltyGraphNodes,但它仍然不会调用costToNode.当我打印图形的nodes属性时,它只显示为GKGraphNode2D对象,而不是我的子类.

我错过了一些明显的东西吗?

gamekit sprite-kit swift ios9

6
推荐指数
0
解决办法
234
查看次数

如何跨设备分享已保存的游戏?

我在我的iOS游戏中实现了GameKit,包括保存的游戏功能.

这是我如何保存和加载游戏的示例:

MobSvcSavedGameData.h

#ifndef MOBSVC_SAVEDGAMEDATA_H
#define MOBSVC_SAVEDGAMEDATA_H

#import <Foundation/Foundation.h>

@interface MobSvcSavedGameData : NSObject <NSCoding>

@property (readwrite, retain) NSString *data;

+(instancetype)sharedGameData;
-(void)reset;

@end


#endif /* MOBSVC_SAVEDGAMEDATA_H */
Run Code Online (Sandbox Code Playgroud)

MobSvcSavedGameData.m

#import "MobSvcSavedGameData.h"
#import <Foundation/Foundation.h>

@interface MobSvcSavedGameData () <NSObject, NSCoding>

@end

@implementation MobSvcSavedGameData

#pragma mark MobSvcSavedGameData implementation

static NSString * const sgDataKey = @"data";

+ (instancetype)sharedGameData {
    static id sharedInstance = nil;

    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedInstance = [[self alloc] init];
    });

    return sharedInstance;
}

- (void)reset
{
    self.data = nil;
}

- …
Run Code Online (Sandbox Code Playgroud)

objective-c objective-c++ gamekit game-center icloud

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

手游、跨平台排行榜/挑战

我正在开发一个小型文字游戏作为业余项目,并选择 Flutter 来发布适用于 Android 和 iOS 的游戏。我可以使用 flutter 包(例如https://pub.dev/packages/games_services)与 Google Play Games 和 Apple Game Kit 集成,但我认为这不允许创建跨平台排行榜,但 iOS 和Android 玩家可以看到他们各自的分数。

我找到的选项:

在我开始使用 Fire Base 创建简单的评分/排行榜之前,我希望在这里找到也对此进行研究的人。有没有办法既使用 Google 和 Apple 服务,又查看统计 x 平台?我更喜欢这个,也希望能给用户带来更综合的体验,或许还能通过这个获得新用户。

感谢您的指点。

android gamekit ios google-play-games flutter

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

为什么我会泄漏?

我有一个只包含这个的应用程序:

- (void)viewDidLoad
{
    [super viewDidLoad];

    //Authenticate Local GameCenter player
    [[GKLocalPlayer localPlayer] authenticateWithCompletionHandler:^(NSError *error)
     {
         [GKTurnBasedMatch loadMatchesWithCompletionHandler:^(NSArray *matches, NSError *error)
          {

          }];
     }];
}
Run Code Online (Sandbox Code Playgroud)

马上,我得到了大量的泄漏.难道我做错了什么?我用ARC.

在此输入图像描述

xcode objective-c instruments gamekit ios

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

一些startBrowsingForNearbyPlayersWithReachableHandler问题

我正试图让GameKit使用本地配对[[GKMatchmaker sharedMatchmaker] startBrowsingForNearbyPlayersWithReachableHandler:].基本上,我正在尝试实现无接口的本地匹配:只要我本地附近有一个玩家,我想连接并开始匹配.重要的是,我只是想为本土球员做到这一点:我从来没有想在互联网上自动匹配.

我在iTunes iTunes中为我的应用启用了Game Center,并在我用来测试的每台设备上注册了一个不同的沙盒帐户.

我尝试了两种配对GKMatchmakerViewController(在验证本地播放器之后)和程序化配对startBrowsingForNearbyPlayersWithReachableHandler:,在iPhone 4和第四代iPod Touch上运行相同的代码在我的桌面上彼此相邻.都没有找到另一个; 当使用GKMatchmakerViewController界面寻找附近的球员仍然在

寻找玩家......

微调器,使用时startBrowsingForNearbyPlayersWithReachableHandler:,通知块永远不会被调用.

这是我目前的测试代码块:

-(void)connectLocal
{
    if( ![GKLocalPlayer localPlayer].isAuthenticated )
    {
        // authenticateLocalPlayer calls connectLocal again after authentication is complete
        [ self authenticateLocalPlayer ];
        return;
    }
    [[GKMatchmaker sharedMatchmaker] startBrowsingForNearbyPlayersWithReachableHandler:^(NSString *playerID, BOOL reachable) {
             NSLog(@"Reachability changed for player %@", playerID );
        } ];
}
Run Code Online (Sandbox Code Playgroud)

文档在这个主题上有点稀疏和混乱,特别是当涉及到本地多人游戏和互联网上的比赛之间的差异时.例如,在找到加入该匹配的玩家之前,似乎有必要对本地玩家进行身份验证并创建匹配(创建任何匹配以匹配请求开始).然而,这个小金块似乎暗示:

标准用户界面允许玩家发现附近的其他玩家,即使这两个玩家当前都没有直接连接到Game Center.

另外,在搜索附近玩家中描述的流程中,通过传递给通知块的玩家找到玩家之后,直到步骤3才创建匹配请求 …

gamekit ios game-center

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