下面有一个非常简单的功能,可以将图像平滑地移动到其他位置。它来自游戏,因此例如将玩家的图像向左移动 +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);