我正在尝试制作一款游戏,您的目标是在不撞墙的情况下走到迷宫的尽头,我想确保您不会停止移动。因此,当我按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();}
});
答案 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);
}