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

标签 javascript node.js client server

我对广泛使用的 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/

相关文章:

javascript - 滚动到页面末尾后添加 JQuery 微调器

javascript - jQuery 组复选框问题

javascript - MongoDB/Node.JS : Inserting documents in a loop - variables not updating?

java - 在客户端服务器应用程序中动态选择连接端口

java - 服务器在 readUTF() 函数中被阻止

javascript - 如何选择元素的第二个子元素而不选择其第一个子元素的子元素

javascript - 主机Socket.IO离线

javascript - 将字符串转换为 JSON 对象

javascript - 如何将 Node.js 响应(JSON)发送到 javascript 文件?

AZURE - 如何将资源从一个租户迁移到另一个租户