通过使用GKTurnbaseMatch默认配对方案,我可以连接到匹配项。我还可以通过编程方式和使用默认视图控制器创建新匹配。我还可以通过编程方式和默认视图控制器找到在Game Center中创建本地用户的匹配列表。 但是我总是提到轮到我了,因为我还没有跟下一个参赛者打过一个转弯。 1.连接匹配后,调用didFindMatch并且接收的匹配对象不打印预期的第二个玩家的ID,而它将该玩家的状态打印为“匹配”。
//#3
func turnBasedMatchmakerViewController(_ viewController: GKTurnBasedMatchmakerViewController,
didFind match: GKTurnBasedMatch)
{
print(match)
match.loadMatchData { (d, e) in
print(d)
print(e)
}
self.dismiss(animated: true, completion: nil)
//performSegue(withIdentifier: "GamePlayScene", sender: match)
}
此匹配打印如下。
[
<GKTurnBasedParticipant 0x60000000c430 - playerID:G:25153527799 (local player) status:Active matchOutcome:None lastTurnDate:(null) timeoutDate:(null)>,
<GKTurnBasedParticipant 0x60000000cd50 - playerID:(null) status:Matching matchOutcome:None lastTurnDate:(null) timeoutDate:(null)>
我怎么能连接这两个球员。
我可以找到本地玩家创建的所有比赛,有没有找到游戏中心任何人创建的空比赛列表的方法。
如何加入匹配ID的匹配项?
答案 0 :(得分:0)
这个答案陈述了上述声明中所讨论的一些非常基本的问题,特别是对于那些将来可能面临类似障碍的人。 首先,非常重要的是, GKTurnBasedMatchs 不会填补匹配参与者阵列中的空位以换取新的比赛,除非您最终轮到你。这就是为什么我在两个设备上创建新匹配时遇到麻烦,但无法与两者匹配。 因此,双方的参与者阵列都打印了我在上述问题中提出的实际问题。它将第一个参与者打印为两个设备的本地播放器。 幸运的是,在读完This Tutorial之后,我发现比赛的创造者必须在轮到结束时辞职,以便为其他寻求者打开比赛。通过这种方式,只有新参与者可以找到您的比赛的空位。
现在在结束你的回合之前,你必须选择参与者进行下一回合,虽然你的match.participants
数组将有虚拟参与者,状态为匹配每个和明确null
的玩家ID,但你必须假设他们是你比赛的其他球员。
因此,您必须将下一个参与者分配到您将放置的数组的索引0并结束您的回合。此外,您必须首次创建具有匹配状态的新数据对象,因为在此之前还会有匹配数据null
。
在我的情况下,myMatch.endTurn
是Dictionary
类型的虚拟数据。
@IBAction func endMyTurn(_ sender: Any) {
// This is sincerely for Ending Turn
var dictionaryExample = [String:Any]()
dictionaryExample = ["name": "Asim", "value": 2]
let dataToSend: Data = NSKeyedArchiver.archivedData(withRootObject: dictionaryExample)
if (myMatch?.participants?.count)! > 0
{
// Match is started
var pArray : [GKTurnBasedParticipant] = myMatch!.participants!
let currenParticipantIndex : Int = (myMatch!.participants?.index(of: myMatch!.currentParticipant!))!
pArray.remove(at: currenParticipantIndex)
let currentParticipant = myMatch?.currentParticipant
pArray.append(currentParticipant!)
myMatch?.endTurn(withNextParticipants: pArray, turnTimeout: GKTurnTimeoutDefault, match: dataToSend, completionHandler: { (e) in
print(e ?? "No Error:")
})
}
else
{
// No Match
}
}
现在在你的回合结束后,你的第一次比赛将开始显示Their Turn
这场比赛,并且不允许你在对手进一步结束时进行比赛。
Asim K.
是分配给您的比赛空位的其他玩家。
注意:这将在Game Centre
找到下一个玩家后显示,并且可能需要一段时间才能进行实际匹配,但在测试中,只有在您使用不同的{{1帐户。
**注意:这将保持原样,直到下一位玩家不会轮到他/她为止。 **
对于玩家2找到一场比赛,这将会发生。当从列表中找到/选择匹配时,将调用Game Centre
,匹配数据和完全填充的参与者数组(在我的情况下仅为2)。
turnBasedMatchmakerViewController(_ viewController: GKTurnBasedMatchmakerViewController,
didFind match: GKTurnBasedMatch)