我目前正在开发游戏,并决定通过GameCenter启用多人游戏,以允许用户与朋友玩游戏。我已经按照RayWinderLinch的教程进行了操作,但遇到了问题。
我的问题是当我加载
这意味着GameCenter已经找到每个玩家,并准备开始比赛,但在我的情况下,比赛从未开始。它卡在一个循环中,显示
似乎以下代码:
无法正常工作。
方法从未被运行。我完全不知道发生了什么。我已经尝试了很多次来解决这个问题,但是没有什么作用。我会附上一个图像,显示应用程序屏幕上我的问题,并且我还将附上我正在使用的代码。
我正在使用基于上面提到的教程的
“警告matchmakerViewController:didFindMatch:委托方法未实现”。
尽管在GCHelper.swift文件中已经实现了该方法。当我在我的 iPhone 和 iPad Mini 上进行测试时不会发生这种情况,它只会一直显示“Starting Game...”。
任何帮助将不胜感激。
我的问题是当我加载
GKMatchMakingViewController
并在两个设备上点击大的Play Now
按钮时,它们会找到彼此(这是有意为之),并在设置Game Center用户名下显示Ready
。这意味着GameCenter已经找到每个玩家,并准备开始比赛,但在我的情况下,比赛从未开始。它卡在一个循环中,显示
Starting Game...
,但什么也没有发生。似乎以下代码:
func matchmakerViewController(viewController: GKMatchmakerViewController!, didFindMatch theMatch: GKMatch!)
和
func match(theMatch: GKMatch!, player playerID: String!, didChangeState state: GKPlayerConnectionState)
无法正常工作。
方法从未被运行。我完全不知道发生了什么。我已经尝试了很多次来解决这个问题,但是没有什么作用。我会附上一个图像,显示应用程序屏幕上我的问题,并且我还将附上我正在使用的代码。
我正在使用基于上面提到的教程的
GameKitHelper.h
框架。它是用Swift编写的,称为GCHelper。
代码
GCHelper的代码可以在之前提到的GitHub链接中找到。
我已经剪切了与此问题无关的代码。 class GameScene : SKScene, GameKitHelper, MultiplayerNetworkingProtocol {
override func didMoveToView () {
GCHelper().authenticateLocalUser() //Authenticate GameCenter User
println("\n \n \n Authenticating local user \n \n \n")
}
func startMultiplayer () {
var vc = self.view?.window?.rootViewController
GameKitHelper().findMatchWithMinPlayers(2, maxPlayers: 2, viewController: vc!, delegate: self); //Find match and load GKMatchMakerViewController
}
func matchStarted() {
//Delegate method
println("match started")
}
func matchEnded() {
//Delegate method
println("match ended")
}
func match(match: GKMatch, didReceiveData: NSData, fromPlayer: String){
//Delegate Method
println("Did receive data")
}
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
for touch in (touches as! Set<UITouch>) {
let location = touch.locationInNode(self)
if self.nodeAtPoint(location) == multiplayer //SKSpriteNode {
//User clicked on multiplayer button, launch multiplayer now!
println("Loading multiplayer")
startMultiplayer()
}
}
图片
我注意到当我使用我的 iPhone 和模拟器进行测试时,iPhone 的状态从“Ready”变为“Disconnected”,但是在模拟器上,状态仍然是“Ready”,然后我会在 iPhone 的控制台中收到以下消息:“警告matchmakerViewController:didFindMatch:委托方法未实现”。
尽管在GCHelper.swift文件中已经实现了该方法。当我在我的 iPhone 和 iPad Mini 上进行测试时不会发生这种情况,它只会一直显示“Starting Game...”。
任何帮助将不胜感激。
didFindMatch
方法 - 在这个方法中,你可以关闭匹配视图控制器。 - Martin