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

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

  1. 这样做有什么好处吗?
  2. 你可以参考我在NodeJS中的任何“最佳实践”服务器端实现吗?

更新

我在animation和游戏循环之间有点困惑 – 我正在寻找的是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); } 

}());

这样做有什么好处吗?

在客户端 – 有。 虽然setTimeout及其朋友在定时器队列中运行 – requestAnimationFrame会同步到浏览器的页面渲染(绘制),所以当您使用它时,不会出现抖动,因为您告诉它绘制的内容和浏览器绘图是同步的。

通常游戏有两个循环 – 渲染循环(画什么)和游戏循环(事物的逻辑)。 第一个是在一个requestAnimationFrame ,另一个在setTimeout – 两者都必须运行得非常快。

这是Paul Irish 在requestAnimationFrame上的一个参考 。

你可以参考我在NodeJS中的任何“最佳实践”服务器端实现吗?

由于服务器不渲染任何图像 – 服务器中填充requestAnimationFrame没有意义。 你将在Node / io.js中使用setImmediate来为你在客户端使用requestAnimationFrame

简单地说 – requestAnimationFrame被添加来解决服务器中不存在的问题(graphics数据的无抖动渲染)。