0

当我尝试仅在第一个“移动命令”中将 div(坦克)向右移动时,并且仅在那个方向上,我遇到了一个问题,即我的 div 向右射出几千个像素,远离屏幕区域。希望有人能帮助我看看为什么会这样。

function animate() {
    var tank = document.getElementById("tank");

    tank.style.marginLeft="360px";
    tank.style.marginTop="440px";

    window.xpos = tank.style.marginLeft;
    window.ypos = tank.style.marginTop;

    window.x = xpos.replace("px","");
    window.y = ypos.replace("px","");

    document.onkeydown = checkKey;

    function checkKey(e) {

        e = e || window.event;

        if (e.keyCode == '37') {
            if (x > 0) {
                x = x - 20;
                tank.style.marginLeft = x + "px";
            }
        } else if (e.keyCode == '39') {
            if (x < 70) {
                x = x + 20;
                tank.style.marginLeft = x + "px";
            }
        } else if (e.keyCode == '38') {
            if (y > 0) {
                y = y - 20;
                tank.style.marginTop = y + "px";
            }
        } else if (e.keyCode == '40') {
            if (y < 440) {
                y = y + 20;
                tank.style.marginTop = y + "px";
            }
        }
    }

    checkKey(e);
}

window.lives = 3;

function destroy() {
    if (lives != 0) {
        alert("Life Lost!");
        lives--;
        window.collision == false;
        animate();
    } else {
        alert("Try Again!");
    }
}

window.collision = true;

function state() {
    if (collision == false) {
        window.state = 1;
    } else if (collision == true) {
        window.state = 0;
    }

    return state;
}

state();

if (state == 1) {   
    animate();
} else {
    destroy();
}
4

1 回答 1

0

你认为你正在做一个数学运算,但你真正在做的是一个字符串连接。在 Javascript 中,“360”-20 等于 340,因为在这种情况下,字符串被转换为数字,然后对两个数值执行算术减法,但是对于加号运算符适用一组不同的规则:在这种情况下为“360” +20 产生“36020”,因为数字被转换为字符串,然后两个字符串被连接起来。

做这个:

window.x = Number(xpos.replace("px",""));
window.y = Number(ypos.replace("px",""));
于 2013-10-16T01:20:00.107 回答