gpt4 book ai didi

javascript - 如何使用 Canvas 处理多个按键

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:50:31 28 4
gpt4 key购买 nike

使用类似的东西:

window.addEventListener("keydown", handleFn, true);

多人游戏时,我如何才能同时处理多个按键?多个人将使用一个键盘,因此可以同时按下 Q 和 P 键以在屏幕上移动不同的对象。

我还没有任何 keyup 句柄,想知道这是否能解决这个问题。

到目前为止我的逻辑是这样的:

if keydown == Q
paddle.left = true;

...

//game loop
if paddle.left == true
paddle.x -= 1;
paddle.left = false;

玩家也应该按住按钮。

最佳答案

这就是我通常的做法。首先,您需要一个数组来保存键状态。

var keys=[];

然后设置您的事件监听器。

// key events
document.body.addEventListener("keydown", function (e) {
keys[e.keyCode] = true;
});
document.body.addEventListener("keyup", function (e) {
keys[e.keyCode] = false;
});

下面的操作是将数组中的一个项目设置为 true 或 false,对应于该键代码。

然后你只需要使用一些条件,看看按下了什么,你应该做什么。

    // check the keys and do the movement.
if (keys[38]) {
if (velY > -speed) {
velY--;
}
}

if (keys[40]) {
if (velY < speed) {
velY++;
}
}
if (keys[39]) {
if (velX < speed) {
velX++;
}
}
if (keys[37]) {
if (velX > -speed) {
velX--;
}
}

下面是一个演示,您可以在其中四处移动并进行多次按键操作。使用 wasd 和方向键。

Live Demo

var canvas = document.getElementById("canvas"),
ctx = canvas.getContext("2d");

canvas.width = canvas.height = 300;

var player1 = {
x: 50,
y: 150,
velY: 0,
velX: 0,
color: "blue"
},
player2 = {
x: 250,
y: 150,
velY: 0,
velX: 0,
color: "red"
};

var x = 150,
y = 150,
velY = 0,
velX = 0,
speed = 2,
friction = 0.98,
keys = [];

function update() {

if (keys[38]) {
if (player1.velY > -speed) {
player1.velY--;
}
}

if (keys[40]) {
if (player1.velY < speed) {
player1.velY++;
}
}
if (keys[39]) {
if (player1.velX < speed) {
player1.velX++;
}
}
if (keys[37]) {
if (player1.velX > -speed) {
player1.velX--;
}
}

if (keys[87]) {
if (player2.velY > -speed) {
player2.velY--;
}
}

if (keys[83]) {
if (player2.velY < speed) {
player2.velY++;
}
}
if (keys[68]) {
if (player2.velX < speed) {
player2.velX++;
}
}
if (keys[65]) {
if (player2.velX > -speed) {
player2.velX--;
}
}
ctx.clearRect(0, 0, 300, 300);
updatePlayer(player1);
updatePlayer(player2);
setTimeout(update, 10);
}

function updatePlayer(player) {
player.velY *= friction;
player.y += player.velY;
player.velX *= friction;
player.x += player.velX;

if (player.x >= 295) {
player.x = 295;
} else if (player.x <= 5) {
player.x = 5;
}

if (player.y > 295) {
player.y = 295;
} else if (player.y <= 5) {
player.y = 5;
}

ctx.fillStyle = player.color;
ctx.beginPath();
ctx.arc(player.x, player.y, 5, 0, Math.PI * 2);
ctx.fill();
}

update();

document.body.addEventListener("keydown", function (e) {
keys[e.keyCode] = true;
});
document.body.addEventListener("keyup", function (e) {
keys[e.keyCode] = false;
});

关于javascript - 如何使用 Canvas 处理多个按键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15661796/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com