一个开关条件不起作用而另一个开关条件不起作用

时间:2014-12-19 21:54:16

标签: javascript

我正在制作一种屏幕上的果蝇,但是已编程。首先我写了非常大的代码,但我发现有些问题。果蝇只向左移动但不向右移动。

代码"向右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;
    }
}

1 个答案:

答案 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