我正在制作一种屏幕上的果蝇,但是已编程。首先我写了非常大的代码,但我发现有些问题。果蝇只向左移动但不向右移动。
代码"向右90度":
case 90:
fly.style.marginLeft = (parseInt(left) + sw).toString();
break;
代码"左边270度":
case 270:
fly.style.marginLeft = (parseInt(left) - sw).toString();
break;
90度不工作,270 工作,但为什么90不工作?我只看到" +"不同于" - ",整个代码:
document.body.innerHTML = document.body.innerHTML + "<img id='fly' onclick='hi();' src='http://screen-bug.googlecode.com/git/fruitfly-moving.gif'>";
var fly = document.getElementById("fly");
var rotation = 0;
var ramargintop = Math.floor(Math.random() * screen.height);
var ramarginleft = Math.floor(Math.random() * screen.width);
fly.style.marginTop = ramargintop;
fly.style.marginLeft = ramarginleft;
var interval = setInterval(movefly, 50);
function movefly(){
// rotation += Math.floor((Math.random() * 20) - 9.46);
if(rotation < 0){
rotation += 360;
}else if(rotation > 360){
rotation -= 360;
}
fly.style.transform = "rotate(" + rotation + "deg)";
moveflyforward();
}
function moveflyforward(){
var topa = fly.style.marginTop;
var left = fly.style.marginLeft;
var sw = 0.2;
switch(rotation){
case 0:
fly.style.marginTop = (parseInt(topa) - sw).toString();
break;
case 90:
fly.style.marginLeft = (parseInt(left) + sw).toString();
break;
case 180:
fly.style.marginTop = (parseInt(topa) + sw).toString();
break;
case 270:
fly.style.marginLeft = (parseInt(left) - sw).toString();
break;
case 360:
fly.style.marginTop = (parseInt(topa) - sw).toString();
break;
default:
document.body.innerHTML = "<font color='red' size='30'>Error on fly, please contact Ebbe.z@live.nl about this. CODE: MoveForwardSwitch</font>";
break;
}
}
答案 0 :(得分:1)
问题在于使用parseInt
我们假设left
为10(sw
为0.2)
当你添加0.2到10时,结果是10.2
,下一次运行left
将再次为10(并且没有任何反应),因为parseInt
返回一个整数。
当你从10减去0.2后,结果将是9.8
,在下次运行时left
将是9(也不是所需的结果)。
使用parseFloat
代替parseInt
(当您要使用浮点数时)或将sw
设置为整数,例如1