Canvas でアニメーションを操作しているときに、予期していなかったことに気付きました。画面の下から上にループで移動する、サイズの異なる 5 つの画像のかなり簡単なアニメーションがあります。
すべての画像データを配列に入れて、ループを介してキャンバスにwindow.requestAnimationFrame
描画し、次のフレームで新しい描画を行うために使用します。
ここが興味深い部分です。最初は、 を使用してレンダリングされた各フレームのキャンバスをクリアしましたcontext.clearRect(0, 0, canvas.width, canvas.height);
。次に、画面の一部だけが実際に変更されたとしても、レンダリングごとにキャンバス全体をクリアするのは計算の無駄だと思いました。
そのため、次のようなものを使用して、キャンバスをクリアする部分を書き直して、古い画像描画の痕跡のみをクリアしました。
for (var key in _images) {
context.clearRect(_images[key].x-1, _images[key].y+_images[key].height, _images[key].width+2, 5);
}
しかし、あまりにも驚いたことに、これは遅いようです...最初はフレームレートが 49-60 で、その後は 47-57 でした。理由はありますか?これを最適化する他の方法はありますか?