Javascript 如何使箭头键始终能够移动角色?

Javascript 如何使箭头键始终能够移动角色?,javascript,node.js,Javascript,Node.js,我一直在做一个激光标签游戏,我想(显然)让我的玩家四处走动。所以,根据YouTube上的教程,我成功地让我的播放器移动了!但是,在我按下一个键并按下相反的键后,我不能再按下相反的键。我的意思是,如果我按向上箭头键,即使我停止按该键,我的角色也会不停地向上移动。唯一能阻止它的方法是按下向下键。然而,如果我想让我的角色倒下,我的角色不会移动;它就站在那里。左箭头键和右箭头键也是如此-如果我按right,它将不停地移动,直到按下左箭头为止。然后,左键停止工作 因此,我有两个问题: 我怎样才能使我的角色

我一直在做一个激光标签游戏,我想(显然)让我的玩家四处走动。所以,根据YouTube上的教程,我成功地让我的播放器移动了!但是,在我按下一个键并按下相反的键后,我不能再按下相反的键。我的意思是,如果我按向上箭头键,即使我停止按该键,我的角色也会不停地向上移动。唯一能阻止它的方法是按下向下键。然而,如果我想让我的角色倒下,我的角色不会移动;它就站在那里。左箭头键和右箭头键也是如此-如果我按right,它将不停地移动,直到按下左箭头为止。然后,左键停止工作

因此,我有两个问题:

我怎样才能使我的角色在举起钥匙后停止

我怎样才能使所有的钥匙始终工作

谢谢你的帮助

代码:


文件
var ctx=document.getElementById(“ctx”).getContext(“2d”);
ctx.font='30px Arial';
var socket=io();
socket.on('newPositions',函数(数据){
ctx.clearRect(0,0500);
对于(变量i=0;i
好的,所以我找到了问题所在。我只听了“向下键”,没有听“向上键”。这是我需要添加的代码:

document.onkeyup = function(event){
        if(event.keyCode === 68)    //d
            socket.emit('keyPress',{inputId:'right',state:false});
        else if(event.keyCode === 83)   //s
            socket.emit('keyPress',{inputId:'down',state:false});
        else if(event.keyCode === 65) //a
            socket.emit('keyPress',{inputId:'left',state:false});
        else if(event.keyCode === 87) // w
            socket.emit('keyPress',{inputId:'up',state:false});
    }

因为你开火时只听
按键
。你也应该听
keyup
并设置所有
player。按…
false
@MoshFeu ok…你能给我举个代码的例子吗?事实上,我写了一篇关于它的帖子:)我认为这和你正在做的非常相似-哇,这看起来很酷!除了…我不太确定如何在我的代码中实现这一点(原谅我,我对这一点很陌生),事实上我发现了问题所在…没关系
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <canvas id="ctx" width="500" height="500" style="border:1px solid #000000;"></canvas>
 
    <script src="https://cdn.socket.io/socket.io-1.4.5.js"></script>
    <script>
        var ctx = document.getElementById("ctx").getContext("2d");
        ctx.font = '30px Arial';
     
        var socket = io();
     
        socket.on('newPositions',function(data){
            ctx.clearRect(0,0,500,500);
            for(var i = 0 ; i < data.length; i++)
                ctx.fillText(data[i].number,data[i].x,data[i].y);       
        });
        document.onkeydown = function(event){
            if(event.keyCode === 39)    //d
                socket.emit('keyPress',{inputId:'right',state:true});
            else if(event.keyCode === 40)   //s
                socket.emit('keyPress',{inputId:'down',state:true});
            else if(event.keyCode === 37) //a
                socket.emit('keyPress',{inputId:'left',state:true});
            else if(event.keyCode === 38) // w
                socket.emit('keyPress',{inputId:'up',state:true});
    
        }
    </script>
</body>
</html>
document.onkeyup = function(event){
        if(event.keyCode === 68)    //d
            socket.emit('keyPress',{inputId:'right',state:false});
        else if(event.keyCode === 83)   //s
            socket.emit('keyPress',{inputId:'down',state:false});
        else if(event.keyCode === 65) //a
            socket.emit('keyPress',{inputId:'left',state:false});
        else if(event.keyCode === 87) // w
            socket.emit('keyPress',{inputId:'up',state:false});
    }