不会。
加多个条件。
var state = {
up : 0,    //w
down: 0,   //s
left:0,    //d
right:0   //a
}
function keydownFn(e){

var s = state;
if(e.which == 87 || state.up){
state.up = 1;

}
if(e.which == 83 || state.down){
state.down = 1;

}
if(e.code == 68 || state.left){
state.left = 1;

}
if(e.code == 65 || state.right){
state.right = 1;
}
}
function keyupFn(e){
var s = state;
if(e.which == 87 || state.up){
state.up = 0;

}
if(e.which == 83 || state.down){
state.down = 0;

}
if(e.code == 68 || state.left){
state.left = 0;

}
if(e.code == 65 || state.right){
state.right = 0;
}
}document.addEventListener('keydown',keydownFn);
document.addEventListener('keyup',keyupFn);

解决方案 »

  1.   

        if(e.which == 87 || state.up){
            state.up = 0;
        }
    这个判断有问题,当向上时,松开任意键,state.up = 0就会成立.坦克就会停.
    这里应该使用&&.
      

  2.   

    顺手了。应该。
    if(e.which == 87 ){
            state.up = 0;
        }
      

  3.   

    谢谢,还有。你这个只控制了WSAD四个键,那上下左右4个方向键呢?按下W键坦克向上走,在走的时候按下方向键,坦克向下发炮,但是坦克不能听,边向上走同时还有向下发炮,所以在按下W的时候,再按方向键,W键不能失效?谢谢了