1

我试图了解我尝试使用 GameKit 进行蓝牙连接的游戏所需的基本步骤。我只有一台设备,所以我不能很容易地测试我的想法。

该游戏通过 GameKit 通过蓝牙最多涉及 2 名玩家,唯一要发送/接收的数据是“镜头”,其中仅包括位置和方向数据。

这是我认为应该发生的事情,我真的只是希望有人指出我犯的任何错误:

  • 游戏首先呈现一个 GKPeerPickerController,其 connectionTypeMask 为“GKPeerPickerConnectionTypeNearby”,并将其委托设置为“self”。

  • GKPeerPickerController 委托方法 'peerPickerController:didConnectPeer:toSession:' 已实现并将会话 dataReceiveHandler 设置为 self。peerID 被添加到 NSMutableArray 中,该数组保存所有连接的对等 ID。(任何时候都应该只有 1 个对等方连接)。

  • 为了在每个游戏中只强制执行 1 个对等连接,方法 'session:didReceiveConnectionRequestFromPeer:' 检查 NSMutableArray 的 'count' 属性,该 NSMutableArray 包含已连接的 peerID。如果 'count'>0 则我们通过调用响应:'denyConnectionFromPeer:' 否则,我们调用:'acceptConnectionFromPeer:error:'

  • 为了发送一个镜头,游戏调用:'sendData:toPeers:withDataMode:error:'

  • 要接收镜头,游戏会响应:'receiveData:fromPeer:inSession:context:'

是否缺少任何步骤?例如,如果用户在我连接到他们之前尝试连接到我,我的 GKPeerPickerController 会发生什么?我怎么知道要解雇它?

如果没有另一部 iPhone/iPod,我将无法测试。

4

1 回答 1

3

首先,如果你想在 Gamekit 中测试蓝牙,你真的需要第二台设备。如果您对您的应用程序很认真,请尝试购买支持 GameKit 蓝牙的廉价/翻新 iPhone 或 iPod Touch(最旧的设备不支持)。实际上,我认为您使用两台 Mac 进行测试会做得更好,但如果您还没有第二台,那就太昂贵了。

您在上面发布的内容非常正确 - 实际上使用 PeerPicker 非常简单,您应该能够使用 Apple 的文档轻松完成它。问题是,根据我的经验,它有点笨拙。这可能是因为我正在使用 3GS 和 3G 进行测试,并且它们内部有不同的蓝牙,但是当你概述的场景发生时,我经常看到奇怪的事情 - “如果用户在我连接之前尝试连接我给他们。” 最后,它通常仍然可以工作,但并非没有一点等待的开销,而且用户可能不得不重复该过程一两次。

于 2010-03-10T13:47:28.237 回答