我正在尝试制作游戏,但遇到了问题

时间:2020-07-07 15:04:27

标签: javascript

我正在尝试制作一款游戏,您的目标是在不撞墙的情况下走到迷宫的尽头,我想确保您不会停止移动。因此,当我按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);
}
document.addEventListener("keydown", event => {
    if(event.key==="a") {moveLeft();}
    if(event.key==="d") {moveRight();}

    if(event.key==="s") {moveDown();}
    if(event.key==="w") {moveUp();}
});

1 个答案:

答案 0 :(得分:0)

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

var movingRight = false;
var movingLeft = false;
var movingUp = false;
var movingDown = false;

然后,您需要同时使用事件监听器进行按键按下和按键输入

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();}
});

最后创建所有启动和停止功能,例如Right:

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);
}