有没有办法为非 60hz 的高/低帧速率显示器设置 rAF 的 FPS?

2024-07-04

所以我有一台 120hz 显示器和一台 60hz 显示器。如果我在第一个显示器上运行游戏,它会运行得非常快,但是当我在第二个显示器上运行它时,它会变慢。我知道也有很多 30hz 显示器,但速度会更慢(还有一些 240hz 显示器,速度快如闪电)。有没有办法将游戏的帧速率锁定为 60fps(这是最常见的),这样问题就不会发生?


No, requestAnimationFrame应该在下一次屏幕刷新之前触发,这使得它与屏幕刷新率相关联。

你需要的是一个增量时间 https://en.wikipedia.org/wiki/Delta_timing.

不要在每个刻度处将对象位置增加一个静态值,而是测量自上次刻度以来已经过去了多长时间,并根据经过的时间和预设的持续时间更新您的值。

这样,无论显示器的刷新率如何,或者即使页面受到计算机等的限制,您的动画对象都会以相同的速度在任何地方行走给定的距离。

这是一个示例,显示即使我们“暂停”动画,当我们“恢复”动画时,对象仍将处于其应在的位置,而无需暂停。

const it = document.getElementById( "it" );
const checkbox = document.querySelector( "input" );
const maxLeft = window.innerWidth - 50;
const duration = 2000; // time to traverse the screen (ms)
const start = performance.now();

function anim( now ) {

  // 'now' passed by rAF is the time the last VSync event has been sent by the monitor
  // it may not be the real "now" time, for this one could use
  // performance.now() instead
  const delta = ((now - start) % duration) / duration;
  // determine if we should go to left or to right
  const direction = Math.sign( ((now - start) % (duration * 2)) - duration );

  let position;
  if( direction < 0 ) {
    position = delta * maxLeft;
  }
  else {
    position = maxLeft - (delta * maxLeft);
  }
  it.style.transform = `translateX(${ position }px)`;
  if( checkbox.checked ) {
    requestAnimationFrame( anim );  
  }
}

requestAnimationFrame( anim );
checkbox.oninput = anim;
#it {
    width: 50px;
    height: 50px;
    background: red;
    border-radius: 50%;
    position: fixed;
    top: 50px;
    will-change: transform;
}
<div id="it"></div>
<label>pause/resume<input type="checkbox" checked></label>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法为非 60hz 的高/低帧速率显示器设置 rAF 的 FPS? 的相关文章

  • 如何在没有 iframe 的情况下使用 Google 表单?

    几年前 我在互联网上发现如何在联系页面中使用 Google 表单 仅使用属性提交按钮操作中的查询而不使用 iframe 现在 我再也找不到了 没有 iframe 是否仍然可以使用 Google 表单 我刚刚找到了 function post
  • 上传时防止空闲状态(iOS 上的 Web 应用程序)

    我正在构建一个将在移动和桌面上使用的网络应用程序 在 iOS 上进行测试后 我注意到我的手机将进入空闲状态 屏幕关闭 返回时显示锁定屏幕 即使有是一个正在上传的文件 ajax上传 有什么办法可以防止这种情况发生吗 我正在通过将应用程序作为
  • 使用 Cookie 记住我时的安全性

    我已经在 PHP 中实现了一个登录类 并且想要创建一个记住账号键入功能 这样用户就不必每次访问都登录 我对此进行了一些研究 并准备使用 PHP setcookie 编写它 但后来遇到了这个页面 如何使用 jquery 创建 记住我 并存储
  • Jquery 密码字段的默认值

    我在用这个 Jquery 插件 http mudge github com jquery example 用于使用单击时消失的文本填充输入 它对于密码字段来说并不理想 因为所有内容都显示为点 在开始输入之前使默认文本在密码字段中可见的好方法
  • SharePoint REST 查询 SP.UserProfiles.PeopleManager 特殊字符

    这个问题是我作为起点发现的这个问题的延伸 无需特殊字符即可工作 SharePoint REST 查询 SP UserProfiles PeopleManager https stackoverflow com questions 23340
  • 有没有办法为非 60hz 的高/低帧速率显示器设置 rAF 的 FPS?

    所以我有一台 120hz 显示器和一台 60hz 显示器 如果我在第一个显示器上运行游戏 它会运行得非常快 但是当我在第二个显示器上运行它时 它会变慢 我知道也有很多 30hz 显示器 但速度会更慢 还有一些 240hz 显示器 速度快如闪
  • 如何处理对象字面量?

    我是 Javascript 新手 试图提取存储在对象中的一些文本 该对象被定义为对象字面量并传递给 a 中的函数调用该函数 脚本 和对象 具有以下结构 foo query count 2 created 2009 07 25T08 17 5
  • 计算随机生成的六边形的6个顶点

    我需要一些帮助来写方程式 我想生成仍然 完美 成比例 的随机大小的六边形 最左边的顶点将位于 0 0 我想考虑与最左边的顶点相关的其他顶点 从左顶点向上这么多 从它右边这么多 从它向下这么多 这不是那么简单的原因是因为我需要它成比例 目前
  • 通过 DOMParser 渲染时,HTML 5 视频不会显示在 Safari 中(通过 innerHTML 渲染工作正常)

    注意 有很多关于视频无法在 safari 上渲染的问题 这个问题是关于在 Safari 中使用 DOMParser 渲染视频 如果我使用innerHTML 渲染视频 一切正常 我有最简单的 HTML 5 视频 它是通过以下方式呈现的DOMP
  • Angular ui - 选项卡控制器执行多次

    当我单击一个选项卡时 相应的控制器会执行 4 次 为什么 E g DetailsPersonController s init函数执行了4次 仅应在加载选项卡视图后执行 HTML 标签
  • 如何在引导程序使用jquery中单击另一个链接时更改活动类?

    我有一个 html 作为侧边栏 并使用Bootstrap ul class nav nav list li class active a href Link 1 a li li a href link2 Link 2 a li li a h
  • 在 firefox-extension 的新选项卡中打开链接

    我开发了一个网络应用程序来将其用作 Firefox 扩展 在 Firefox 中 我将它包含在 iframe 中 如下所示 现在我想在我的应用程序中有一些传出链接 如果我只使用普通的链接标记 例如 a href http mywebapp
  • 如何安装并开始使用 Vuetify 和 Vue.js 3

    我在哪里可以找到新的 Vuetify 版本与 Vue js 3 兼容的文档以及如何使用 Vue cli 安装和设置它 在 vue 2 中我们这样做 vue create project name then vue add vuetify 我
  • 有没有可靠的方法在 IE11 中使用 ctx.drawImage() ?

    我有一个脚本 可以根据数据查询创建动态 SVG 图形 我需要将它们粘贴到 PDF 中 为此我使用 jsPDF 不幸的是 jsPDF 自己的 addSVG 似乎不起作用 所以我花了一些时间尝试使用画布将 SVG 转换为 PNG 我似乎可以将
  • 错误:“访问受限 URI 被拒绝”

    访问受限 URI 被拒绝 代码 1012 中断此错误 xhttp send null function getXML xml file if window XMLHttpRequest var xhttp new XMLHttpReques
  • sails-mongo 适配器,标准化错误消息

    我正在使用 sails mongo 适配器尝试 sailsJs 和 mongodb 将验证添加到模型后 当验证失败时 我会收到以下响应 Users js 模型 module exports schema true attributes na
  • scrollIntoView 滚动得太远

    我有一个页面 其中包含从数据库动态生成的带有 div 的表行的滚动条 每个表格行的作用就像一个链接 有点像您在视频播放器旁边的 YouTube 播放列表中看到的那样 当用户访问该页面时 他们所在的选项应该位于滚动 div 的顶部 此功能正在
  • WEBP图像回退

    我在互联网上搜索了很多 找不到可以完整教授的正确示例或完整教程 所以请大家给我推荐一些好的例子 我已经在很多网站上尝试过 WEBP 代码 例如与现代化工具一起使用 检查浏览器支持或使用背景图像 有一篇关于 Stucox 的文章 您可以在其中
  • 如何构建我的 PHP 项目?

    我即将开始另一个大型 PHP 项目 这次 我打算让项目文件夹变得整洁 所以我有几个关于保持我的项目干净和干燥的问题 如何区分 PHP 源文件和浏览器应访问的 PHP 文件 换句话说 我如何清楚哪些 PHP 文件提供输出 哪些提供函数或类定义
  • JavaScript 开发人员不使用 Array.push() 是否有原因?

    我经常看到开发人员在 JavaScript 中使用如下所示的表达式 arr arr arr length Something arr arr length Another thing 不会push更合适吗 arr arr push Some

随机推荐

  • 如何创建每 24 小时运行一次的活动?

    我需要每 24 小时运行一次 delete tags from tags left join tagowners on tags id tagowners tagId where tagowners tagId is null CREATE
  • 在Python中写入具有特定权限的文件

    我正在尝试创建一个仅用户可读和可写的文件 0600 唯一的方法是使用os open 如下 import os fd os open path to file os O WRONLY 0o600 myFileObject os fdopen
  • C 中枚举类型溢出?

    如果我有一个枚举类型 例如 enum week sunday 0 monday tuesday wednesday thursday friday saturday 我有 enum week day day saturday day 一天的
  • 从 Java 访问 Kotlin 类对象

    我有一个 Kotlin 类 它有一个类对象 例如 public class Foo public class object public val SomeValue Int 0 如果我从 Java 使用此类 如何访问类对象内的 SomeVa
  • postgres:从命令行在数据库中创建表

    我试图在 postgres 中创建一个表 但它最终出现在错误的数据库中 这就是我所做的 首先在我的 sql 脚本中创建一个用户和一个数据库 然后创建一个表 代码会解释更多 drop database if exists sinfonifry
  • 如何计算 django 连接表中对象的数量?

    我的问题很简单 我有Users谁拥有Assets or Assets属于用户的如果您愿意 但我无法检索其数量 计数 Assets each User有 我知道这对你们大多数人来说可能听起来很愚蠢 但我是 python django 来自 P
  • 浏览器在使用 CSS 缩放图像时通常使用什么算法?

    我想得到canvas以与 CSS 相同的视觉保真度渲染缩放图像 根据我的测试 在 Chrome 版本 43 0 2357 130 中完成 它似乎不是 Lanczos3 即使我的测试重采样范围 http entropymine com res
  • Java从受限层调用方法

    我什至不确定这是否可行 但我想询问社区的总体意见 我必须解决以下问题 我的项目有 2 层 一个核心层和一个业务层 该核心层提供业务层 这时候Business类就可以导入Core类 为所欲为了 核心类只能导入核心类并使用其方法 禁止访问业务类
  • Zend Framework 2 SOAP AutoDiscover 和复杂类型

    我正在准备 SOAP 服务器并使用以下代码生成 WSDL Controller action code if key exists wsdl params autodiscover new AutoDiscover autodiscover
  • getline 函数的多个分隔符,C++ [重复]

    这个问题在这里已经有答案了 我想逐字阅读文本 以简单的方式避免任何非字母数字字符 从带有空格和 n 的文本 进化 之后 我需要解决这个问题 以防还有 例如 第一种情况只需使用带有分隔符 的 getline 即可解决 我想知道是否有办法使用g
  • React redux api 每 x 秒轮询一次

    我已经做到了这一点 但我正在寻求一种更 最佳实践的方法 它使用https icanhazdadjoke https icanhazdadjokeapi 显示一个随机笑话 每 x 秒更新一次 有更好的方法吗 最终我想添加停止 启动 重置功能
  • Java Web 应用程序的关闭钩子

    我需要在 java web 应用程序停止或 tomcat 停止时保存一些数据 如何才能做到这一点 编辑 如果我使用 jvm shutdown hook 有什么缺点吗 使用一个实现的类ServletContextListener https
  • 为什么需要将新事件添加到 IDL 接口的*末尾*?

    我发现 当我向现有 COM IDL 接口添加新事件时 有时会遇到奇怪的问题 除非将它们添加到接口的末尾 例如 假设我有以下界面 interface IMyEvents HRESULT FooCallback in long MyParam1
  • 在 Elixir 中缓存昂贵的计算

    我在 Elixir 中有一个 Web 应用程序 如下所示 defmodule Test do use Plug Router plug match plug dispatch def expensiveComputation do perf
  • 如何在Carbon实例中添加CarbonInterval实例

    我有一个碳实例 a Carbon Carbon now Carbon Carbon date 2018 06 11 10 00 00 timezone type 3 timezone Europe Vienna 和一个 CarbonInte
  • Parse Server - 如何使用调度程序一遍又一遍地运行“作业”

    我花了一整天的时间尝试让某种调度程序与我的 Parse Server 在 AWS Beanstalk Node js 上运行 一起使用 我能够在 js 文件中获取一些代码 但它似乎不起作用 有什么方法可以设置某种调度程序 这样我就不必通过仪
  • 测试最终字段的初始化安全性

    我试图简单地测试 JLS 保证的最终字段的初始化安全性 这是为了我正在写的一篇论文 但是 根据我当前的代码 我无法让它 失败 有人可以告诉我我做错了什么 或者这只是我必须一遍又一遍地运行然后在一些不幸的时机看到失败的事情吗 这是我的代码 p
  • 动态 iframe onload 未触发?

    我认为这是可能的 因为有大量类似的问题 已解决 但似乎没有一个涉及动态创建的 iframe 基本上 我使用 jquery 创建一个临时 iframe 来加载文件 从通过 ajax 调用提供的文件路径 然后打开文件下载提示 一切正常 但为了防
  • OpenCV (cv2) Python findChessboardCorners 在看似简单的棋盘上失败

    我有以下从相机拍摄的棋盘图像 这是我的最小工作示例代码 import cv2 print cv2 version left gray cv2 imread left raw jpg cv2 CV LOAD IMAGE GRAYSCALE p
  • 有没有办法为非 60hz 的高/低帧速率显示器设置 rAF 的 FPS?

    所以我有一台 120hz 显示器和一台 60hz 显示器 如果我在第一个显示器上运行游戏 它会运行得非常快 但是当我在第二个显示器上运行它时 它会变慢 我知道也有很多 30hz 显示器 但速度会更慢 还有一些 240hz 显示器 速度快如闪