javascript - javascript中的按键检测

标签 javascript html5-canvas

我正在尝试为我的游戏进行按键检测,我这里的代码有些工作,但问题是它不允许我一次按下多个按键,而我的游戏需要这样做。它只允许在任何时刻按下一个键并将球移动到那个方向。

有没有办法允许同时按下多个按键?

var key = 0;
var pos = false;
var posX = 0;
var posY = 0;
var jumpSpeed = 4;
var ball = new Image();
ball.src = 'Ball.png';
var canvas = document.getElementById('bg');
var ctx = canvas.getContext('2d');

document.onkeydown = function (e) {
        pos = true;
        key = window.event ? e.keyCode : e.which;
}

document.onkeyup = function (e) {
        pos = false;
}

setInterval(function () {
    if (pos == false) return;
    else if (key == 65) posX -= 2;
    else if (key == 87) posY -= jumpSpeed;
    else if (key == 68) posX += 2;
}, 1);

setInterval(function () {
    ctx.drawImage(ball, posX, posY);
}, 1);

最佳答案

你的代码只能处理一个键是正常的,因为变量key只能有一个键码。每当您为其分配新值时,前一个值都会被覆盖。

一个解决方案是使用一组 Set 键码:

var keys = new Set;

document.onkeydown = function (e) {
    keys.add(window.event ? e.keyCode : e.which);
}

document.onkeyup = function (e) {
    keys.delete(window.event ? e.keyCode : e.which);
}

setInterval(function () {
    if (keys.has(65)) posX -= 2;
    if (keys.has(87)) posY -= jumpSpeed;
    if (keys.has(68)) posX += 2;
}, 1);

注意:请务必阅读关于 mdn 的弃用说明,并停止使用 keyCodewhich。而是使用 code .

关于javascript - javascript中的按键检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56088723/

相关文章:

JavaScript 使用 3 轴鼠标 Canvas 绘制

javascript - 错误 405 : Method Not allowed flask, ajax

javascript - 如何获取 if/else 语句的当前 url

javascript - 在 KineticJS 中使用 mousedown 事件创建一个矩形

javascript - Canvas 锯齿状边缘与线条/笔划的问题

rust - 在 WebAssembly/Rust 中编辑 Canvas 像素数据

javascript - 使用 android DocumentFile 读取 ZipFile

javascript - RequireJS 路径中具有一个标识符的多个文件

javascript - 如何将此 javascript 代码重写为 C++11?

javascript - 将图像转换为 ImageData (Uint8ClampedArray)