GKPeerPickerController 的连接问题

2024-02-05

我正在使用 GKSession 和 GKPeerPickerController 开发 iOS 游戏。我发现连接两个 iOS 设备的过程缓慢且不可靠,即使它们彼此相邻。我们将我的设备称为“设备 A”和“设备 B”。

通常会发生以下情况:

  1. 在每台设备上,我都点击了应用程序的连接按钮。然后,每个设备都会显示“iPad、iPhone 或 iPod touch”窗口。

  2. 通常,两个设备很快就会注意到对方的存在。

  3. 然后,我告诉其中一台设备(例如设备 A)连接到另一台设备。

  4. 很快,设备 B 的窗口显示设备 A 不可用。

  5. 这就是令人烦恼的地方。经过大约1秒到没有的一段时间后,设备B上会弹出一个窗口,表示设备A想要连接,并询问设备B是否愿意接受连接。

  6. 如果确实弹出上述窗口,则一切正常。但这有时需要很长时间,有时根本不会发生。

我有三台设备,无论使用哪两台,我都会遇到类似的问题。

我能做些什么吗?

我的连接方法非常简单:

-(void) findPeerPickerOpponents {
    GKPeerPickerController *picker;
    picker = [[GKPeerPickerController alloc] init]; 
    picker.delegate = self;
    [picker show]; 
    [self.connectionDelegate disableIdleTimer];
}

好的,你应该做什么:
- 假设您有设备 A、B 和 C
- 设备A正在扫描,设备B刚刚开始扫描
- 设备 A 将设备 B 视为新对等方 - 它向 B 发送邀请
- 设备 B 收到邀请 - 它会自动批准它,两个设备都已连接,除了设备出现在大厅中之外,不会向用户显示任何通知
- 设备C出现
- 设备 A 和 B 尝试连接到它,它们会自动连接并出现在大厅
- 玩家在设备 A 上触摸设备 B
- 设备 A 向 B 发送 WANNAPLAY 数据包
- B 弹出窗口询问玩家是否想和 A 一起玩 - 玩家回答“是”
- 设备 B 向 A 发送 ACCEPTED,并断开除 A 之外的所有人的连接(通过发送 DISCONNECT)
- 设备 A 获得接受并断开除 B 之外的所有人的连接(通过发送 DISCONNECT)
- 设备 C 获得 2x DISCONNECT 并从其大厅中删除 A 和 B

它比标准方法要好得多,即使它的工作量多了 10 倍 - 我两种方法都做了,这是一个非常好的解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GKPeerPickerController 的连接问题 的相关文章

  • WKWebview 中的 iCLoud 文档选择器关闭容器视图

    我有一个 WKWebview 加载基于 Web 的 UI 我希望用户能够从其 iCloud 文档上传文件 我已授予正确的权限 并且可以浏览 iCloud 文档 但是 当我选择文件或单击取消按钮时 文档选择器视图也会关闭 WKWebview
  • 无需越狱即可检测iOS9上哪个应用程序处于前台

    我正在尝试记录用户在 iOS9 上的个人应用程序使用情况 我宁愿它不会使用越狱有限的解决方案 不言自明 在越狱手机上执行此应用程序的变体应该不难 https www andyibanez com create mobilesubstrate
  • 如何将自定义 C 代码放入 SwiftPM 包中?

    我正在尝试将 C 代码打包到 Swift 模块中 我们称之为CModule 一旦我将其放入项目的基本文件夹中 Swift模块 并配置了搜索路径 我可以在 Swift 文件中自动完成工作 并检测错误 警告 问题是 导入时它无法识别该模块 并且
  • 如何观察UserDefaults的变化?

    我有一个 ObservedObject在我看来 struct HomeView View ObservedObject var station Station var body some View Text self station sta
  • 开发者可以在 Windows 应用程序中使用 iCloud 吗?

    开发人员可以使用 Apple 的 iCloud API 在 Mac OS X 和 iOS 上的不同版本的应用程序之间同步应用程序数据 如果开发人员拥有 Windows 版本的应用程序 该版本是否也可以使用 iCloud 将应用程序数据与 M
  • 从 IOS 应用程序注销的完美方法是什么?

    下面的代码可以工作 但有一个错误 场景是 我首先登录进入应用程序系统 登录成功后 应用程序将设置 UserDefaults UserId 之后 我可以使用存储的 UserId 导航应用程序视图 一旦我进入设置和选项卡注销 这将清除 User
  • 在 IOS 中从 iPhone 删除资产(图片或视频)

    我正在开发一个 Iphone 应用程序 我可以使用 Assetslibrary 枚举资产并将它们加载到表视图中 用户可以在应用程序中删除一行 图片 视频 但如何直接从我的应用程序更新 Iphone 相册 否则 刷新时 表视图将重新加载之前删
  • 使 iOS 应用程序与 iPhone 6 和 iPhone 6 尺寸兼容 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我创建了一个应用程序 其中使用 xib 进行布局 目前我使用两种不同的 xib 一种用于iPhone4 320 480 一种用于iPh
  • 启动深色或浅色模式的图像

    如何为深色模式和浅色模式选 择一组不同的启动图像 我有一个 LaunchImages 集 当应用程序启动时 会显示一个图像 对于浅色模式 这似乎不错 但是如果我尝试在设置为深色模式 iOS 13 的设备上打开我的应用程序 则该图像看起来很糟
  • 对于使用 CCCrypt() 的 AES128,密钥可以长于 128 位吗?

    我正在使用CCCrypt https developer apple com library archive documentation System Conceptual ManPages iPhoneOS man3 CCCrypt 3c
  • 重叠的装载机圆

    我试图重现苹果为应用程序 活动 制作的重叠圆圈 见下图 如果您使用标准贝塞尔路径 起始 结束位置将仅在 0 到 2PI 之间产生影响 例如 如果您尝试填充 4PI 即使使用一些阴影 则无法模拟重叠加载 如何制作类似于苹果解决方案的东西来创建
  • 如何向 UIView 添加大小调整手柄?

    我试图根据用户请求在运行时动态创建视图 UIImageView 和 UITextView 然后允许用户移动它们并调整它们的大小 除了调整大小之外 我的一切都工作得很好 我尝试使用捏合手势识别器 但发现它对于我想要的东西来说太笨拙了 因此 我
  • 如何重新定位或移动 Google Maps SDK 上的当前位置按钮?

    如何将 Objective C 中的当前位置按钮移至我的偏好 现在 我已启用它 但底角有东西挡住了它 Thanks 您可以使用 padding 将按钮向上移动 self mapView padding UIEdgeInsets top 0
  • 以编程方式从底部裁剪图像

    我正在开发自定义相机应用程序 一切进展顺利 但我在从底部裁剪图像时遇到了问题 即 裁剪后的图像与原始图像具有完全相同的宽度 但高度将为原始图像的 1 3 并且必须从底部开始 斯威夫特3解决方案 func cropBottomImage im
  • NSTimer 不触发选择器

    在带有 ARC 的 ios5 0 中 在我的 rootviewcontroller 中 我调用由应用程序委托持有的安全管理器对象中的方法 在该方法中 我设置计时器如下 NSTimer timer NSTimer scheduledTimer
  • 可以获取位置,但无法获取航向

    我目前只使用模拟器 但我在 iOS 模拟器上快速使用 CoreLocation 时遇到问题 我得到此代码打印的位置更新 但从未得到标题 我不想当然 我正在尝试制作一个指南针类型的应用程序 它将显示目标的方位 class CompassVie
  • 以编程方式在 App Store 上运行搜索?

    是否可以从我的应用程序中打开 App Store 应用程序并运行搜索 我想看看是否有一个 appstore 类型的 URL 可以使用 就像 mailto 和 sms 分别打开邮件和短信一样 有谁知道这是否可能 编辑 更多信息 我一直在尝试使
  • 如何将iPhone/iPad应用程序更改为仅iPhone?

    我有点愚蠢 将我的应用程序构建为同时针对 iPhone 和 iPad 而实际上它应该只针对 iPhone 如何更改设置以使构建仅适用于 iPhone 我实际上已经完成了应用程序的编码并准备提交它 所以希望这只是更改一些晦涩的项目设置的情况
  • ios - 在哪里放置 s.static_framework = true

    我在 CocoaPods 中的级别为 0 当我使用pod install有一个错误说 The Pods App target has transitive dependencies that include static framework
  • ios - Gamekit 的 GKOctree 未找到元素

    我正在尝试使用GKOctree https developer apple com documentation gameplaykit gkoctree用于高效检索 3D 空间中的对象 然而 以下代码似乎没有按预期工作 import Gam

随机推荐

  • Android:ViewFlipper 和多个图像?

    嘿 我检查了大量的教程和指南 但不知何故找不到它 我需要在我的 Android 应用程序中包含多个图像 它就像一个图像查看器 幻灯片 目前 我只需使用 ImageView 和适配器 使用左 右手势在 drawable mdpi 目录中的图片
  • 如何从 Delphi 访问 Cassandra 分布式数据库

    我正在研究 Cassandra 是否可以作为我们服务器软件的分布式数据库存储的选择 服务器软件是用 Delphi 编写的 但我很难找到如何从 Delphi 访问 Cassandra 数据库的描述 一个建议SO的其他地方 https stac
  • 如何处理 redux saga 中的请求数组

    我正在尝试从我的反应本机应用程序上传多个文件 它正在给予Unexpected Tokenyield 语句错误 是否可以做yield在循环内 files map fileOb gt const response yield call File
  • 如何在 XCode 中获取文本字段的文本

    我用界面生成器制作了一个文本字段 我怎样才能让它的文本在其他地方使用 有没有类似的东西 string text myTextField Text 如果是这样 我该如何命名我的文本字段 因此 您要做的第一件事是在与 xib 文件关联的视图控制
  • 如何将 GUD 断点键绑定更改为旧的键绑定

    目前 我在最新版本的 Emacs 中使用 GUD 自旧版 Emacs 以来 键绑定已经发生了变化 现在设置断点是 C x C a C b 但它是 C 空格 我想知道是否有办法将键绑定更改为旧格式 由于某种原因我无法更改我的 Emacs 版本
  • 调整 select 方法以接受多个参数

    我需要实现一个方法select 可以绑定一个或多个参数和另一种方法 该方法将结果返回到index php 从index php调用所需的代码 echo this gt results gt korisnik id 这是需要实现的数据库类se
  • 隐藏固定透明标题下的滚动内容,滚动背景

    假设我有一个背景图像 一个带有透明部分的固定标题图像 一个带有半透明背景的内容 div 以及传统页眉 内容 页脚布局中的动态高度 我试图实现的效果 在固定标题下滚动背景和内容 隐藏内容并显示背景 我读过很多相关主题 例如隐藏透明标题下的滚动
  • 应该使用哪个 EncodeFor 进行定位?

    Which EncodeFor应该使用location 如果我想通过位置推送一些数据 它应该是什么样子 location obtainBDK cfm message ErrorMessage false nothing OR locatio
  • 从 SQLite 数据库中删除指定数量的行

    我尝试使用以下语句从数据库中删除 6 行 但出现如下错误 getWritableDatabase execSQL DELETE FROM tblname ORDER BY id ASC LIMIT 6 Error 引起原因 android
  • 集合并查找算法

    我有数千行 1 到 100 个数字 每行定义一组数字以及它们之间的关系 我需要获取相关数字的集合 小例子 如果我有这7行数据 T1 T2 T3 T4 T5 T6 T1 T5 T4 T3 T4 T7 我需要一个不太慢的算法来知道这里的集合是
  • Chrome 扩展程序中的页面加载事件

    我想在 Chrome 浏览器页面完全加载后检查其内容中的一些值 像那样 if document body innerText indexOf Cat 1 我可以在何时何地进行支票 请给我一个明确的例子 我读了一些关于 Background
  • 如何向 Symfony 2.1 添加命名空间?

    我有一个使用命名空间的第三方库 我想将其添加到供应商目录中 由于某些原因 我无法为此库使用作曲家 使用 ClassLoader 的 add 方法添加它对我不起作用 找不到类 详细地 我正在使用 Symfony 2 1 7 app autol
  • 在管理控制台上删除 reCAPTCHA 站点

    很简单 我觉得某个地方有一个我没有看到的设置或按钮 我有一个使用 reCAPTCHA 注册的网站列表 我想在管理控制台上删除一个 我该怎么做 当我进入其中一个网站的设置时 似乎没有办法删除 我是对的 有一个删除按钮我没有看到 单击顶部的齿轮
  • Backbone.js 悬停事件未触发

    我第一次尝试使用 Backbone js 但遇到了一些问题 我不知道我的问题是否是我不理解主干应该如何工作 或者这只是一个代码问题 我正在尝试创建一个动态菜单 并且使用其项目创建主菜单栏没有问题 但每当我悬停其中一个菜单项时 我都无法触发悬
  • 使用 axWindowsMediaPlayer 播放两个视频

    我尝试播放jpg 循环 单击mp4后应该在结束后播放 该jpg应该再次播放 我不知道为什么 但在 axWindowsMediaPlayer1 PlayStateChange 中播放 vido 后 播放然后停止 帮助 using System
  • Jenkins DSL 插件:如何在现有的 jenkins 视图中创建作业?

    我发现以下有关创建作业以及使用 DSL 插件添加到新创建的视图的问题 将作业添加到新创建的视图中 https stackoverflow com questions 22021763 create a job dsl that create
  • MediaStore.MediaColumns#DATE_TAKEN 只能从 API 级别 29 开始使用吗?

    我正在尝试使用MediaStore Images Media DATE TAKEN https developer android com reference android provider MediaStore MediaColumns
  • Groovy:读取数组中文件的内容并 grep 查找某些内容

    我正在尝试在 GROOVY 脚本中实现以下内容 但出现错误 读取数组中 HTML 文件的内容 然后grep对于该数组中的某些内容 def file1 new File path to the file xyz html def lines
  • 执行 mongoDb docker 实例的 mongodump 的正确语法是什么?

    我正在运行带有一些 docker 容器的 ubuntu 16 04 LTS 服务器 其中一个容器是 mongoDB 容器 我的数据存储在其中 现在我正在尝试通过以下方式进行备份mongodump 对我来说 问题是 mongoDb 作为 do
  • GKPeerPickerController 的连接问题

    我正在使用 GKSession 和 GKPeerPickerController 开发 iOS 游戏 我发现连接两个 iOS 设备的过程缓慢且不可靠 即使它们彼此相邻 我们将我的设备称为 设备 A 和 设备 B 通常会发生以下情况 在每台设