Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我的W,A,S,D运动中的一个纠结-Javascript新手_Javascript_Keyboard Events - Fatal编程技术网

我的W,A,S,D运动中的一个纠结-Javascript新手

我的W,A,S,D运动中的一个纠结-Javascript新手,javascript,keyboard-events,Javascript,Keyboard Events,当我在W、A、S、D键周围拨号时,我试图创建平滑的移动。除了一个小故障外,我终于找到了一些有效的方法。每当我按住D向右移动并按下A时,球员的移动不会中断。这就是我希望它工作的方式,但当我做相反的事情时,运动会被打断和逆转。如果我切换我在代码中指出的两个块,它将逆转问题,修复一个,破坏另一个。我认为这与它如何捕捉if语句有关,但我不知道。有人能告诉我FFFF是怎么回事吗?Javascript一次只能检测一个键。大概因为它是单线程的,所以只会引发1个事件。我猜是的。通过Set()我得到了它,这样它就

当我在W、A、S、D键周围拨号时,我试图创建平滑的移动。除了一个小故障外,我终于找到了一些有效的方法。每当我按住D向右移动并按下A时,球员的移动不会中断。这就是我希望它工作的方式,但当我做相反的事情时,运动会被打断和逆转。如果我切换我在代码中指出的两个块,它将逆转问题,修复一个,破坏另一个。我认为这与它如何捕捉if语句有关,但我不知道。有人能告诉我FFFF是怎么回事吗?

Javascript一次只能检测一个键。大概因为它是单线程的,所以只会引发1个事件。我猜是的。通过Set()我得到了它,这样它就可以检测多个。我可以将它转换成一个数组,并使用数组中的第一个元素作为条件,这对这个特定的问题有效,但会打乱其他动作,使其变得不稳定。你能组装一个被剪断的堆栈,以便我们都能测试它吗?请由于您只提供部分代码,我们不知道什么是
player
。我们甚至不明白为什么会这样。一个最小的可验证的例子(尽可能少的代码,并且只有最重要的一个)显示这个bug将非常有帮助。在那之前,这只是一堆猜测。你试过开关语句吗?玩家只是一个用PIXI.js制作的精灵,player.vx和player.vy只是精灵的x和y。我不知道为什么我没有试着换一下。我马上回来。
window.addEventListener("keydown", keyDown, false);
window.addEventListener("keyup", keyUp, false);

var key = new Set();
function keyDown(k) {
    key.add(k.keyCode);
    if (key.has(83)) {
        player.vy = 1;  
    };
    if (key.has(87)) {
        player.vy = -1;  
    };
    if (key.has(65)) {
        player.vx = -1;
        if (key.has(68)) {
           player.vx = -1; 
        };
    };
    if (key.has(68)) {
        player.vx = 1;
        if (key.has(65)) {
           player.vx = 1; 
        };
    };
};

    function keyUp(k) {
        key.delete(k.keyCode);
        if (k.keyCode === 83) {
            player.vy = 0;  
        };
        if (k.keyCode === 87) {
            player.vy = 0;  
        };
        if (k.keyCode === 65) {
            if (!key.has(68)) {
                player.vx = 0;
            };
        };
        if (k.keyCode === 68) {
            if (!key.has(65)) {
                player.vx = 0;
            };
        };
    };