嗨,您可以做的一件事是尝试使用定义的函数,而不是使用匿名函数,
http://jsfiddle.net/C4ev3/10/ - 对我来说这个报告在 50-100 MS
但是我不推荐 jQuery 用于 Canvas 应用程序,它对于你使用的很少,你应该尝试使用原生 Javascript
http://jsfiddle.net/C4ev3/11/ - 对我来说这报告了 30-70 MS
Javascript 线程
我在评论中注意到的一件事 Javascript 不是多线程的,嗯,Urm-Arr,它有点是 setInterval 是异步而不是同步,但是影响窗口是单线程 EG,如果你有一个有一些数字的类是它使用 setInteval 将使用另一个线程并且没有问题改变数学但是在任务中然后需要在页面上绘制它将进入 JS 句柄 Que 的底部,
Javascript 的某些部分位于不同的线程上,如果您的线程想要更改表单,那么任何更改页面的操作都必须在主线程上运行,就像任何 Windows 应用程序一样,您必须调用主线程来为您完成
但是它不像其他任何东西一样多线程,你不能在给定的 Wim(如 windows)上处理或中止,
其他异步任务包括 AJAX 可以选择异步和同步
更新以显示我对 FPS 限制的评论:
请多多包涵。这链接到一个已经为显示示例而构建的项目:所以我的游戏完全是 OOP
var elem = document.getElementById('myCanvas');
var context = elem.getContext("2d");
context.fillStyle = '#888';
context.lineWidth = 4;
// Draw some rectangles.
context.fillRect(0, 0, 800, 600);
context.fillStyle = '#f00';
var ball = new Ball();
var leftPadel = new Padel(10, 60, 40, 120);
var rightPadel = new Padel(750, 520, 40, 120);
pong = new Pong();
pong.draw();
setTimeout("ball.move()", pong.redrawTime());
在我的乒乓球课内是游戏的所有主要工作原理,但这里是你需要看到的 FPS 位
this.fps = 30;
this.maxFPS = 60;
this.redrawTime = function(){
return (1000 / this.fps)
}
this.lastDraw = (new Date)*1 - 1;
然后你可以看到我的间隔在球上。移动这在重绘结束时再次调用主 pong 类我有 FPS 检查和限制代码
this.fps = ((now=new Date) - this.lastDraw);
if(this.fps > this.maxFPS){
this.fps = this.maxFPS;
}
this.lastDraw = (new Date)*1 - 1;
if(this.reporting = true){
console.clear();
console.log("FPS: "+this.fps.toFixed(1))
}
setTimeout("ball.move()", pong.redrawTime());
然后,这会迫使您在不排队主线程的情况下获得最佳 FPS