0

我在画布上绘图时遇到问题。问题是当某些事件触发时,'requestAnimFrame' 很慢。

http://jsfiddle.net/pAjYC/4/

您可以看到当前绘图和下一个绘图之间的时间。

只需在任何文本框上键入一点长文本。键入时,您会看到很长的间隔时间。

当您在 fsfiddle 的文本框上键入时,它会检查文本的颜色。

这需要一点时间。例如,键入'v'或'var',在我的情况下,间隔时间更改为16到58。或者通过拖动选择源代码,需要一些时间。原因可能是 DOM 的访问或某些屏幕更改。

但这还不是全部,我正在使用 socket.io 制作游戏。当游戏收到一个 socekt 时,间隔时间为 100 毫秒或更多。但是socket函数只需要10ms或20ms。

这是游戏编程中的关键问题。

有没有办法解决它?

4

2 回答 2

0

requestAnimFrame并不慢 - 这是你的计算速度慢看这里:

http://jsfiddle.net/FwynN/

于 2012-05-28T08:53:31.547 回答
0

您将要使用Erik Möller 的该垫片的更新版本,而不是Paul Irish 的

(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) {
            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);
        };
}())

我不确定这是否能解决问题,但......

于 2012-05-30T16:50:24.390 回答