- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个非常简单的游戏来测试 Game Center 的所有功能,并更加习惯 Apple 的 GameKit 和所有这些东西。这个极其简单的游戏给我带来了很多问题,我一直在缓慢但坚定地解决。我遇到了一个新问题,希望这里有人可以帮助我。
到目前为止我可以执行以下操作:
-连接到游戏中心并验证玩家
-记分板和排行榜以及提交分数
-开始匹配过程(但不开始比赛)。
无论如何,这是我的“开始比赛”代码。这是在比赛请求完成并找到 2 名球员之后:
func matchmakerViewController(_ viewController: GKMatchmakerViewController, didFind match: GKMatch) {
print("Match found")
if match.expectedPlayerCount == 0 {
viewController.dismiss(animated: true, completion: {self.goToGame(match: match)})
}
func goToGame(match: GKMatch) {
let gameScreenVC = self.storyboard?.instantiateViewController(withIdentifier: "mainGame") as! ViewController
gameScreenVC.providesPresentationContextTransitionStyle = true
gameScreenVC.definesPresentationContext = true
gameScreenVC.modalPresentationStyle = UIModalPresentationStyle.fullScreen
gameScreenVC.modalTransitionStyle = UIModalTransitionStyle.crossDissolve
gameScreenVC.match = match
self.present(gameScreenVC, animated: true, completion: nil)
}
现在,被调用的 ViewController 的代码具有以下启动代码:
override func viewDidLoad() {
super.viewDidLoad()
yourTurnLabel.isHidden = true
// Do any additional setup after loading the view, typically from a nib.
matchStart()
}
func matchStart() {
let localPlayerID = GKLocalPlayer.localPlayer().playerID
let initialTurn = "initRand,\(localPlayerID ?? "ERROR: NO ID"),\(aTaps),0,0"
let turnData = initialTurn.data(using: .utf8)
print("Sending String: \(initialTurn)")
sendData(turnLog: turnData!)
}
func sendData(turnLog: Data) {
do {
try match?.sendData(toAllPlayers: turnLog, with: GKMatchSendDataMode.reliable)
print("DATA SENT!")
} catch {
print("ERROR: \(error.localizedDescription)")
}
}
以及来自 MatchMakingDelegate 的以下扩展:
extension ViewController: GKMatchDelegate {
// The match received data sent from the player.
@available(iOS 8.0, *)
public func match(_ match: GKMatch, didReceive data: Data, fromRemotePlayer player: GKPlayer) {
print ("RECEIVED DATA 8.0")
print ("Received \(data) from \(player)")
receiveData(turnLog: data)
}
@available(iOS 9.0, *)
public func match(_ match: GKMatch, didReceive data: Data, forRecipient recipient: GKPlayer, fromRemotePlayer player: GKPlayer) {
print("RECEIVED DATA 9.0")
print ("Received \(data) for \(recipient) from \(player)")
}
// The player state changed (eg. connected or disconnected)
@available(iOS 4.1, *)
public func match(_ match: GKMatch, player: GKPlayer, didChange state: GKPlayerConnectionState) {
print("CHANGED STATE")
}
// The match was unable to be established with any players due to an error.
@available(iOS 4.1, *)
public func match(_ match: GKMatch, didFailWithError error: Error?) {
print("FAILED")
}
// This method is called when the match is interrupted; if it returns YES, a new invite will be sent to attempt reconnection. This is supported only for 1v1 games
@available(iOS 8.0, *)
public func match(_ match: GKMatch, shouldReinviteDisconnectedPlayer player: GKPlayer) -> Bool {
return true
}
}
现在,它似乎运行良好,直到我开始游戏,我在 x-Code 控制台中得到以下输出,并且我从未看到“receiveData”触发器
AUTHENTICATED!
true
2018-01-23 17:54:01.401426+0700 testGameCenter[6423:364053] [log] [ERROR] RemoveNominatedCandidatePair:994 failed with invalid index input: -1, candidate pair count: 5
2018-01-23 17:54:01.412127+0700 testGameCenter[6423:364053] [log] [ERROR] gckSessionCheckPendingConnections:1438 gckSessionCheckPendingConnections: iICEChecksLeft=0, iUnconnectedNodeCount=0, iDDsExpected=1
2018-01-23 17:54:01.420996+0700 testGameCenter[6423:363683] [log] [ERROR] ICEStopConnectivityCheck:2688 ICEStopConnectivityCheck() found no ICE check with call id (714168510)
2018-01-23 17:54:01.427471+0700 testGameCenter[6423:363683] [log] [ERROR] gckSessionCheckPendingConnections:1438 gckSessionCheckPendingConnections: iICEChecksLeft=0, iUnconnectedNodeCount=0, iDDsExpected=0
Match found
2018-01-23 17:54:05.012667+0700 testGameCenter[6423:363234] [MC] Lazy loading NSBundle MobileCoreServices.framework
2018-01-23 17:54:05.014147+0700 testGameCenter[6423:363234] [MC] Loaded MobileCoreServices.framework
Sending String: initRand,G:11851656342,0,0,0
DATA SENT!
2018-01-23 17:54:05.043478+0700 testGameCenter[6423:363234] [Error] Extension request cancelled with error: Error Domain=NSExtensionErrorDomain Code=-2 "Extension cancelled by host." UserInfo={NSLocalizedDescription=Extension cancelled by host.}
DATA SENT!
我希望你能帮我弄清楚 code2 是什么以及如何阻止它。谢谢!
最佳答案
您从未设置过匹配委托(delegate)。
关于ios - 在 Game Center 比赛中出现错误 : cancelled by host,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48399851/
在我的 Android 应用程序中,我运行一个计时器并在其他事件发生时取消它: class MyTimerTask extends TimerTask { override bool
如果有待处理的警报,PendingIntent.cancel() 如何影响 AlarmManager。 我应该对两个对象( Intent 和警报管理器)调用取消来取消警报吗?有人可以解释一下他们是如何
我正在研究如何取消闹钟,我遇到了这两种方法。应该在什么情况下使用哪一个,为什么?它们是一样的吗? 我目前正在这样做: Intent alarmIntent = new Intent(ChangeAla
我与一位同事讨论了在表单中取消的“网络标准”是什么。在我们的讨论中,我们以“更改密码”页面为例。我们设计了“发送”按钮和“取消”按钮。两者设计相同。 他声称在网络标准中,取消按钮不再是一个按钮,而是一
我一直在探索协程,我很惊讶地发现在 Job 上调用的 cancel 实际上并没有取消作业,而 cancel 在 scope 上调用会立即取消从 scope 启动的协程。谁能解释一下? 作业取消示例。
我正在使用 iOS 应用内购买。 我想请求最新的取消日期和取消总数,最好是 100% 正确的结果。 我正在使用 Apple 的 verifyreceipt 调用 ( https://developer
我在 ionic 2 应用程序中使用谷歌地图,我希望我的标记根据 map 的缩放级别显示/消失。所以我在函数“ionViewDidEnter”中添加了以下行: this.map.addList
在我们的网络应用程序中,我将 Angular-Materials $mdDialog 与确认对象一起使用。是否可以将按钮的顺序从取消-确定更改为确定-取消?并将初始焦点设置为取消按钮?也许通过 CSS
在我的表单“别名”的Form_beforeupdate()事件上,我有这个... If IsNull(Me.txtFName) And IsNull(Me.txtLName) Then MsgBox
在 QInputDialog 中,如何去掉 OK 和 Cancel 按钮中的图标? 注意取消和确定的图标。我查看了属性按钮,不知道如何删除它们。 最佳答案 解决方案的策略是先获取按钮,但是这些属于QD
我正在使用 MFMailComposeViewController Controller ,如下所示: MFMailComposeViewController *picker1 = [[MFMailC
当我尝试连接在不同机器上运行的对等点时出现此错误。我在订购者的 docker 日志中发现此错误。在不同机器上运行的 peer2 的 docker 日志中有错误 获取连接失败:无法连接到任何端点:[or
我注意到,当用户通过提示窗口输入文本时,提示将返回null并继续继续执行代码。我希望取消按钮按照其指示执行操作并取消。我尝试了几个 if 语句,包括: var x= prompt("Please en
我有一个定制对话框winform。在它上面,我有一个标签,文本框和2个按钮(“确定”和“取消”)。它还声明并定义重载的执行方法以传递不同的参数列表。 对话框Winform的调用方式如下: var th
我刚刚使用 Visual Studio 2017 安装了 Xamarin 并创建了一个新的空白应用程序。 当我按 F5 运行应用程序时,出现以下错误:构建已被取消。但是在构建解决方案时(ctrl+sh
Closed. This question needs debugging details。它当前不接受答案。 想改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。 3年前关闭。 I
我在使用 NgRx 的 Angular 应用程序中使用轮询方案。 为了简化事情,我有如下内容: public stopPolling$ = createEffect(() => this.ac
在我读到的规范中: The bubbles and cancelable attributes must return the values they were initialized to. 我找不
我有一个 dataGetter 类,在其中加载必要的数据(部分 url 地址、电子邮件等),然后调用 AsyncTask。我使用一个抽屉菜单,其中每个 fragment 在创建时都会从新线程调用 da
我在使用 NgRx 的 Angular 应用程序中使用轮询方案。 为了简化事情,我有如下内容: public stopPolling$ = createEffect(() => this.ac
我是一名优秀的程序员,十分优秀!