gpt4 book ai didi

javascript - NodeJS 中 requestAnimationFrame() 的服务器端实现

转载 作者:IT老高 更新时间:2023-10-28 23:26:05 34 4
gpt4 key购买 nike

我对广泛使用的 requestAnimationFrame() 函数有一些疑问。最近我在多人游戏中遇到了一些实现,他们在客户端而不是服务器端使用它。

  1. 这样做有什么好处吗?
  2. 您能否引用我在 NodeJS 中的任何“最佳实践”服务器端实现?

更新

我在动画和游戏循环之间有点困惑 - 我正在寻找的是 NodeJS 中的实现 => 例如 setInterval

示例 - 客户端实现

(function () {
var lastTime = 0;
var vendors = ['ms', 'moz', 'webkit', 'o'];
for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];
window.cancelAnimationFrame =
window[vendors[x] + 'CancelAnimationFrame'] ||
window[vendors[x] + 'CancelRequestAnimationFrame'];
}

if (!window.requestAnimationFrame)
window.requestAnimationFrame = function (callback, element) {
var currTime = new Date().getTime();
var timeToCall = Math.max(0, 16 - (currTime - lastTime));
var id = window.setTimeout(function () {
callback(currTime + timeToCall);
}, timeToCall);
lastTime = currTime + timeToCall;
return id;
};

if (!window.cancelAnimationFrame)
window.cancelAnimationFrame = function (id) {
clearTimeout(id);
};
}());

最佳答案

Is there any benefit in doing so?

在客户端 - 有。虽然 setTimeout 和它的 friend 在计时器队列中运行 - requestAnimationFrame 被同步到浏览器的页面渲染(绘制它)所以当你使用它时没有抖动,因为你告诉它要绘制什么和浏览器绘制是同步的。

通常游戏有两个循环——渲染循环(绘制什么)和游戏循环(事物在哪里的逻辑)。第一个在 requestAnimationFrame 中,另一个在 setTimeout 中 - 两者都必须运行得非常快。

这里是 a reference on requestAnimationFrame保罗爱尔兰人。

Can you reference me to any "best practices" server side implementation in NodeJS?

由于服务器不渲染任何图像 - 在服务器中填充 requestAnimationFrame 没有意义。您将在 Node/io.js 中使用 setImmediate 来实现在客户端中使用 requestAnimationFrame 的目的。

简单地说 - 添加 requestAnimationFrame 是为了解决服务器中不存在的问题(图形数据的无抖动渲染)。

关于javascript - NodeJS 中 requestAnimationFrame() 的服务器端实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30442896/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com