TouchsMoved 以不规则的间隔调用

2024-02-08

我正在为 iOS 制作一款游戏,您主要在屏幕上拖动大对象。当我在实际的 iPad/iPhone 上运行游戏一段时间(连续在屏幕上画圈拖动对象)时,每隔 5 分钟左右拖动的对象会卡顿约 10-30 秒。然后,它又恢复如丝般光滑的移动状态。

从视觉上看,游戏的帧速率似乎一度下降到 15 fps,但实际上它一直以坚如磐石的 60 fps 运行。然而,我注意到唯一移动不顺畅的是拖动的对象,而游戏的其余部分都运行得非常流畅。

这让我相信卡顿与 iOS 中的触摸输入有关。所以我开始查看 TouchMoved,发现它通常每 16 毫秒调用一次(因此触摸输入以 60 fps 运行)。到目前为止,一切都很好。

然后我注意到当对象开始卡顿时,touchesMoved 开始以奇怪的时间间隔被调用,在 8 毫秒到 50 毫秒之间剧烈波动。

因此,当触摸屏处于这种奇怪的状态时,有时 TouchMoved 会在上一次调用后仅 8 毫秒被调用,有时直到上一次调用后 50 毫秒才会被调用。当然,这会使拖动的对象看起来很不稳定,因为它的位置会以不规则的间隔更新。

您知道什么可能导致 TouchMoved 停止像通常那样定期调用吗?


这不是 Unity 中的错误。

操作系统内部的某些东西进入了错误状态,并且触摸拖动消息停止顺利流动。有时您会在一个框架中获得多个更新,有时则什么也得不到。

在 iPhone4 或更低版本上,或者游戏以 30Hz 帧速率运行时,不会出现此问题。

我在使用我在前一家公司工作时编写的内部引擎时遇到了这个错误。它首先在升级拼字游戏的 UI 系统后显现出来,您可以在屏幕上拖动图块。这太奇怪了,我永远无法确定确切的复制步骤,但不知何故,它们似乎与时间有关。

它也可以在《愤怒的小鸟》(除非他们现在已经修复了)和市场上的各种其他游戏中看到,基本上任何带有触摸拖动滚动或移动的游戏。对于《愤怒的小鸟》,只需进入一个关卡并开始横向滚动即可。大多数时候它会如丝般光滑,但也许十分之一的时候,它会很笨重。重新启动应用程序并重试。

解决方法是将几帧的输入更新频率降至 30Hz。这会以某种方式震动操作系统的内部结构,并给它时间来理顺自己,因此当你将其恢复到 60Hz 时,它会再次平稳运行。

每当您检测到已进入不良状态时就执行此操作。

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

TouchsMoved 以不规则的间隔调用 的相关文章

随机推荐

  • |= 运算符在 C++ 中意味着什么?

    运算符在 C 中意味着什么 假设您在整数上使用内置运算符 或在用户定义的类上使用合理重载的运算符 则这些运算符是相同的 a a b a b The 符号是按位或赋值运算符 它计算右侧 b 与左侧 a 的 或 值 并将结果分配给 a 但在执行
  • 在类路径中查找重复的类

    我有一个使用 Maven 构建的 Java 应用程序 它有很多依赖项 当执行我的测试用例时 它们有时会很好地通过 有时会因为一些不兼容的类组合而失败 所以看来类路径中必须有一些类两次是随机选取的 一个很好 另一个则不好 如何找出我的类路径中
  • 计算三角形内的格点

    我有一个大三角形的点 我们称之为 a b c a x y 等 现在我想统计这个三角形围成的区域内有多少个积分点 所以我首先看一下皮克定理 我考虑的第二种方法是生成一个以三角形的最大值 最小值为界的点列表 然后检查每个点是否位于三角形内部 我
  • HDF5 是否支持并发读取或写入不同的文件?

    我试图了解 HDF5 并发的限制 HDF5 有两种版本 并行HDF5 and default 目前 Ubuntu 中提供了并行版本 Anaconda 中默认提供 通过判断 enable parallel flag 我知道并行写入同一文件是不
  • 在上下文中按 ID 查找 SignalR 客户端

    所以我想通过 SignalR 向特定客户端发送消息 该客户端不是 Clients Caller 目前我只能通过将其称为 ID 上下文中的一个属性 来识别它 this Context Items ID 那么要通过 ID 查找客户端 我该如何
  • 要求 RMagick 向 ImageMagick 发送直接命令

    RMagick 不支持 ImageMagick 的某些选项 有时使用 ImageMagick 实际上更方便 是否有 Image 对象的 方法允许您使用命令行界面直接向 ImageMagick 发送命令 你用一下可以吗system或通过反引号
  • 在Android中使用导航组件时如何删除默认动画过渡?

    我正在使用导航组件 并且在主要活动中有一个底部导航视图 当我点击底部导航视图中的选项卡时 片段出现时动画似乎会淡出 我不认为我手动设置了动画 似乎动画会默认存在 我想删除那个动画 这是我在主要活动中使用的代码 class MainActiv
  • 按坐标的时区[重复]

    这个问题在这里已经有答案了 正如标题所暗示的 我需要根据一对坐标找到一个时区 或者可能只是 UTC 偏移量 我一直在寻找不同的解决方案 并且有一些网络服务 但我需要能够离线访问应用程序 由于时区并不完全基于经度 这似乎并不那么容易 我想查询
  • 如何使用 jQuery 将

    如何使用 jQuery 移动特定的
  • C# 中带有随机数的二维数组

    我想在 C 中创建二维数组 size 3 on 5 插入随机数 我尝试这样做 但它不起作用 Random rnd new Random int lala new int 3 5 for int i 0 i lt 3 i for int j
  • 如何重新排列 gtsummary 或 flextable 中的列?

    参考这个答案 置信区间 https stackoverflow com a 66891473 13734451 https stackoverflow com a 66891473 13734451 如何重新排列 gtsummary 或 f
  • 如何将 pdftk 添加到 Heroku Cedar 应用程序?

    我需要在 Heroku Cedar Rails 应用程序中将多个 PDF 文件合并为一个 并决定使用 pdftk 来完成此操作 我不知道如何做到这一点 我认为最好的方法是创建一个自定义构建包 其中包含 pdftk 的编译二进制文件 但我不太
  • ruby 中日期的比较

    如何将特定日期与今天进行比较以了解该特定日期是否大于今天 谢谢哈里什 date 2010 07 20 to date 20th July today Date today 21st July if date gt today puts da
  • 在导出 Android 应用程序向导中为 Android 应用程序生成密钥库?

    我正在尝试在 Eclipse 中导出已签名的 Android 应用程序 我认为我正朝着正确的方向前进 右键单击项目 gt 安卓工具 gt 导出已签名的申请包 将出现 导出 Android 应用程序 向导 选择我要导出的项目 点击Next 出
  • 如何使用 Objective C 在 SQLITE 中启用外键约束

    今天我注意到我的 SQLite 表上的外键约束不起作用 在阅读 Stack Overflow 后 我发现应该启用此功能 所以 我正在寻找执行此操作的代码片段 到目前为止 我只能找到这个 self db executeUpdate PRAGM
  • 在VBA中同时设置单元格左边框和右边框

    想知道是否有办法用一条语句设置单元格的左边框和右边框 类似的东西msgBox配置可以组合 添加在一起 例如vbYesNo vbQuestion 我试过 Cells j i Borders xlEdgeLeft xlEdgeRight 这给我
  • 如何使用 SQL Server 数据库中的值填充列表?

    该列表将根据我的数据库中有多少项目而增长和缩小 我需要填充列表而不是列表框 我知道我需要打开一个连接 using var conn new SqlConnection Properties Settings Default DBConnec
  • java bean如何将多个对象封装成一个

    在定义中说 java bean将许多对象封装成一个对象 Bean 这里的 许多对象 是什么意思以及java bean如何将它们封装成一个对象 None
  • 如何在 python 中使用 ipython 笔记本 Markdown 单元格的内容

    在 IPython 中 我们可以通过以下方式获取先前的输出和输入Out n and In n 变量 是否可以使用 Markdown 笔记本单元的内容并在 python 中使用它 我想在 Markdown 单元格中写入一些文本 This is
  • TouchsMoved 以不规则的间隔调用

    我正在为 iOS 制作一款游戏 您主要在屏幕上拖动大对象 当我在实际的 iPad iPhone 上运行游戏一段时间 连续在屏幕上画圈拖动对象 时 每隔 5 分钟左右拖动的对象会卡顿约 10 30 秒 然后 它又恢复如丝般光滑的移动状态 从视