画像を他の場所にスムーズに移動するための非常に簡単な機能を以下に示します。これはゲームのものなので、たとえばプレイヤーの画像を +30 ピクセル左に移動し、マップも +30 ピクセル左に移動します。
問題は、遅いことを除いてすべて正常に機能しています。私の最新の CPU i7 930 2.8 Ghz では、非常にスムーズで高速ですが、1.8 Ghz CPU を搭載したネットブックでは非常に低速です。また、より優れたローエンドのハードウェアでは、この機能は遅延が大きく (画像の動きがそれほどスムーズではありません)、同じ動きを完了するのにより多くの時間を必要とします。
この関数の CPU 負荷を軽減するにはどうすればよいですか?
var blokada = 0;
var blokada2 = 0;
function translate(elem, x, y, toff, loff, delay2) {
if (document.getElementById(elem) && blokada == 0) {
blokada = 1;
var elem = document.getElementById(elem);
var left = loff,
top = toff,
dx = x,
dy = y, //top - y,
i = 1,
count = delay2,
delay = delay2 * 2;
function loop() {
if (i >= count) {
blokada = 0;
return;
}
i += 1;
elem.style.left = (left - (dx * i / count)).toFixed(0) + 'px';
elem.style.top = (top - (dy * i / count)).toFixed(0) + 'px';
setTimeout(loop, delay);
}
loop();
}
}
function translate2(elem, x, y, toff, loff, delay2) {
if (document.getElementById(elem) && blokada2 == 0) {
blokada2 = 1;
var elem = document.getElementById(elem);
var left = loff,
top = toff,
dx = left - x,
dy = top - y,
i = 1,
count = delay2,
delay = delay2;
function loop() {
if (i >= count) {
blokada2 = 0;
return;
}
i += 1;
elem.style.left = (left - (dx * i / count)).toFixed(0) + 'px';
elem.style.top = (top - (dy * i / count)).toFixed(0) + 'px';
setTimeout(loop, delay);
}
loop();
}
}
translate2('player', x, y, 120, 120, 10); //5
translate('map3', x, y, 0, 0, 10);