【发布时间】:2015-10-20 08:59:07
【问题描述】:
我目前正在开发我的游戏,我决定在游戏中通过 GameCenter 启用多人游戏,以允许用户玩他们的朋友。我遵循RayWinderLinch 的教程,但遇到了问题。
我的问题是,当我加载 GKMatchMakingViewController 并在两台设备上点击大的 Play Now 按钮时,它会找到彼此(这意味着会发生)并且在设置的游戏中心用户名下它会说 @ 987654327@。
这意味着 GameCenter 已经找到了每个玩家并准备开始它应该开始的比赛,但在我的情况下,比赛永远不会开始。它卡在一个循环上,上面写着Starting Game...,什么也没有发生。看来
func matchmakerViewController(viewController: GKMatchmakerViewController!, didFindMatch theMatch: GKMatch!)
和
func match(theMatch: GKMatch!, player playerID: String!, didChangeState state: GKPlayerConnectionState)
方法永远不会运行。我完全不知道发生了什么。我已经反复尝试了很多次来解决问题,但没有任何效果。我将附上一张图像,显示我的问题仍然存在的应用程序屏幕,我还将附上我正在使用的代码。
我正在使用基于
GameKitHelper.h的框架 上面提到的教程。它是用swift写的,被称为 GCHelper
代码
可以使用前面提到的 GitHub 链接找到 GCHelper 的代码
我已经删掉了这个问题不需要的代码
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...
任何帮助将不胜感激。
【问题讨论】:
-
您是否将游戏中心代理设置为自我/控制器?我发现 Game Center 在模拟器上比较有问题,所以我总是使用真机进行测试
-
我对你说的不是很清楚,我也试过在真机上测试
-
您需要实现
didFindMatch- 在该方法中您可以关闭媒人视图控制器 -
在帖子中提到的GCHelper类中实现
-
但是在您的
startMultiplayer()中,您将委托设置为self- 所以它希望这些方法在您的类中实现,而不是在 GCHelper 中实现。
标签: ios swift sprite-kit game-center multiplayer