Javascript I';我想做一个游戏,但遇到了一个问题

Javascript I';我想做一个游戏,但遇到了一个问题,javascript,Javascript,我想做一个游戏,你的目标是在不碰壁的情况下到达迷宫的尽头,我想确保你不能停止移动。所以当我按下W时,我应该向上移动,当我按下D时,我应该停止向上移动,开始向右移动 问题是我不知道当你按下另一个键时如何确保你停止移动 这就是我现在拥有的: function moveRight() { var moveRight = setInterval(function(){ let top = parseInt (window.getComputedStyle(char

我想做一个游戏,你的目标是在不碰壁的情况下到达迷宫的尽头,我想确保你不能停止移动。所以当我按下W时,我应该向上移动,当我按下D时,我应该停止向上移动,开始向右移动

问题是我不知道当你按下另一个键时如何确保你停止移动

这就是我现在拥有的:

function moveRight() {
    var moveRight = setInterval(function(){
        let top =
        parseInt (window.getComputedStyle(character).getPropertyValue("top"));
        let left =
        parseInt (window.getComputedStyle(character).getPropertyValue("left"));
        left += 1;
        character.style.left = left + "px";
    }, 1);
}

您的角色继续移动,因为您正在设置间隔,并且从不停止间隔。 首先,您需要将间隔的所有引用作为全局变量,因此在函数外部定义它们:

var movingRight = false;
var movingLeft = false;
var movingUp = false;
var movingDown = false;
然后,您需要keydown和keyup的事件侦听器

document.addEventListener("keydown", event => {
    if(event.key==="a") {startMoveLeft();}
    if(event.key==="d") {startMoveRight();}
    if(event.key==="s") {startMoveDown();}
    if(event.key==="w") {startMoveUp();}
});
document.addEventListener("keyup", event => {
    if(event.key==="a") {stopMoveLeft();}
    if(event.key==="d") {stopMoveRight();}
    if(event.key==="s") {stopMoveDown();}
    if(event.key==="w") {stopMoveUp();}
});
最后创建所有启动和停止函数,例如右:

function startMoveRight() {
    movingRight = setInterval(function(){
        let top =
        parseInt (window.getComputedStyle(character).getPropertyValue("top"));
        let left =
        parseInt (window.getComputedStyle(character).getPropertyValue("left"));
        left += 1;
        character.style.left = left + "px";
    }, 1);
}
function stopMoveRight() {
    clearInterval(movingRight);
}

我先前的回答可能会有所帮助:setInterval继续开火?将
var moveRight=
更改为
movement=
,然后在每次调用move*funcs时添加一个
clearInterval(movement)
,然后再创建它。根据此代码,您永远不会停止移动。在移动到下一个方向之前,您需要删除这些setInterval。更好的方法是在keydown事件中设置一个变量以确定其移动的方向,然后您只需要一个setInterval,因为它只需查看当前方向即可。@LawrenceOne这是一个很好的方法。我仍然不明白
是什么意思,我想确保你不能停止移动
这是正确的方法-尽管querent说不应该停止移动。因此不需要
keyup
监听器;相反,每个
startMoveX
方法应该在开始新的非空间隔之前清除所有现有的非空间隔。
function startMoveRight() {
    movingRight = setInterval(function(){
        let top =
        parseInt (window.getComputedStyle(character).getPropertyValue("top"));
        let left =
        parseInt (window.getComputedStyle(character).getPropertyValue("left"));
        left += 1;
        character.style.left = left + "px";
    }, 1);
}
function stopMoveRight() {
    clearInterval(movingRight);
}