こんにちは、匿名関数を使用する代わりに、定義済み関数を使用してみてください。
http://jsfiddle.net/C4ev3/10/ - 私にとって、これは 50-100 MS で報告されました
ただし、キャンバス アプリケーション用の jQuery はお勧めしません
http://jsfiddle.net/C4ev3/11/ - 私にとって、これは 30-70 MS を報告しました
Javascript のスレッディング
コメントで気づいたことの 1 つは、Javascript がマルチスレッドではなく、Urm-Arr であるということです。setInterval は同期ではなく非同期ですが、ウィンドウに影響を与えるのはシングル スレッド EG です。 setInterval を使用すると別のスレッドが使用され、数学の変更に問題はありませんが、Task ではページに Draw が必要で、JS ハンドル Que の下部に入ります。
Javascript の特定の部分は別のスレッド上にありますが、スレッドがフォームを変更したい場合は、Windows アプリケーションと同じように、ページを変更するすべてのものをメイン スレッドで実行する必要があります。メイン スレッドを呼び出してそれを実行する必要があります。
ただし、Windows のように特定の Wim で処理または中止できない他のものとは異なり、マルチスレッドではありません。
その他の非同期タスクには、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());
私の pong クラスの中には、ゲームのすべての主要な仕組みがありますが、見る必要がある FPS ビットはここにあります
this.fps = 30;
this.maxFPS = 60;
this.redrawTime = function(){
return (1000 / this.fps)
}
this.lastDraw = (new Date)*1 - 1;
次に、インターバルがball.moveにあることがわかるように、これは再描画の最後に再描画でメインの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 を取得することが強制されます