gpt4 book ai didi

javascript - 无法同时移动两个 Canvas 矩形

转载 作者:行者123 更新时间:2023-11-28 05:49:49 24 4
gpt4 key购买 nike

我今天问了另一个问题,我还有一个问题..

但首先是代码:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Pong</title>
<script type="text/javascript">
var x = 100;
var y = 100;
var xmoveFirst = 720;
var ymoveFirst = 0;
var xmoveSecond = 30 ;
var ymoveSecond = 0;
function canvas() {
var can = document.getElementById('theCanvas');
can.style.backgroundColor = "black";
var ctx = can.getContext('2d');

//first player
ctx.fillStyle="white";
ctx.fillRect(xmoveFirst,ymoveFirst,5,75);

//second player
ctx.fillStyle = 'white';
ctx.fillRect(xmoveSecond,ymoveSecond,5,75);

//first player move
function move(event) {
ctx.clearRect(0,0,750,750); //clear rects
if (event.keyCode == 40) {
ymoveFirst+=25;
console.log("first,"+ymoveFirst);
}

else if (event.keyCode == 38) {
ymoveFirst-=25;
console.log("first,"+ymoveFirst);
}

else if (event.keyCode == 83) {
ymoveSecond +=25;
}

else if (event.keyCode==87) {
ymoveSecond -=25;
}
ctx.fillStyle="white";
ctx.fillRect(xmoveFirst,ymoveFirst,5,75);
ctx.fillRect(xmoveSecond,ymoveSecond,5,75);

}
var movement = document.addEventListener("keydown", move);


}


</script>
</head>
<body onload="canvas()">
<canvas id="theCanvas" width="750" height="750"></canvas>
</body>
</html>

所以每个矩形都在完美移动:)但这是问题所在..我无法将它们一起移动..

感谢您的帮助!!

最佳答案

问题是,浏览器一次只能处理 1 个按下的键。要绕过此问题,您需要执行以下操作:

  • 数组
  • 两个事件监听器,一个用于 keydown 事件,一个用于 keyup 事件。

该数组将保存当前按下的键。在 keydown 事件监听器中,您需要将与按下的键的 id 相同索引处的元素设置为 true,在 keyup 事件监听器中,您需要将相同的元素设置为 false。示例:

var keys = [];

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

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

这将确保元素在释放按键之前保持为真。您可以通过检查具有相同索引的元素来检查当前是否按下了某个键:

if (keys[87]) {
// The "W" key is pressed
}
if (keys[83]) {
// The "S" key is pressed
}
/// ...

注意:检查按下的键时不应使用else-if

关于javascript - 无法同时移动两个 Canvas 矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38163942/

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