【发布时间】:2021-04-06 00:08:53
【问题描述】:
我正在尝试在游戏循环中使用画布跟踪最后 4 次按键。
var lastKeys = []; // array to hold last 4 key presses
window.addEventListener("keydown", key_down, false); // key down
window.addEventListener("keyup", key_up, false); // key up
var keycode = "";
if (key.left == true) keycode = "left";
if (key.right == true) keycode = "right";
if (key.up == true) keycode = "up";
if (key.down == true) keycode = "down";
And later on in the draw phase...
// add new element
lastKeys.unshift(keycode);
// remove last element
lastKeys.pop();
lastKeys 数组应该记录[up, down, left right],它只会记录[right, right, right right],在下面的示例中什么都没有。 - 因为每次滴答都会记录最后一次按键并覆盖内容。只有我对如何解决这个问题有点困惑。
有人可以帮帮我吗?
最少代码如下: index.html
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset="utf-8" />
<title>Minimum</title>
<link href = "stylesheet.css" rel = "stylesheet">
</head>
<body>
<canvas id="canvas" width="640" height="360"></canvas>
<!-- get keys -->
<script type="text/javascript" src="js/keys.js"></script>
<!-- call last -->
<script type="text/javascript" src="js/main.js"></script>
</body>
</html>
main.js
// declare canvas
var canvas = document.getElementById('canvas'),
ctx = canvas.getContext('2d'),
key =
{
right: false,
left: false,
up: false,
down: false,
}
const canvasW = canvas.width;
const canvasH = canvas.height;
// end canvas declarations
//vegetables
// -------------------------------
var lastKeys = [];
var keyCode = -1;
// initalise
function init()
{
// initialise keys
window.addEventListener("keydown", key_down, false); // key down
window.addEventListener("keyup", key_up, false); // key up
// window.addEventListener("keydown", function (e)
// {
// keys[e.keyCode] = true;
// });
// window.addEventListener("keyup", function (e)
// {
// keys[e.keyCode] = false;
// });
}
// call initialization
init();
// Draw frames
setInterval( render, 16 );
function render()
{
get_keys();
}
function get_keys()
{
if (key.left === true) keyCode = 37;
if (key.up === true) keyCode = 39;
if (key.right === true) keyCode = 38;
if (key.down === true) keyCode = 40;
console.log("K: " + keyCode);
// add new element
lastKeys.unshift(keyCode);
// remove last element
lastKeys.pop();
console.log(lastKeys);
}
keys.js
// declare canvas
var canvas = document.getElementById('canvas'),
ctx = canvas.getContext('2d'),
key =
{
right: false,
left: false,
up: false,
down: false,
}
const canvasW = canvas.width;
const canvasH = canvas.height;
// end canvas declarations
//vegetables
// -------------------------------
var lastKeys = [];
var keyCode = -1;
// initalise
function init()
{
// initialise keys
window.addEventListener("keydown", key_down, false); // key down
window.addEventListener("keyup", key_up, false); // key up
// window.addEventListener("keydown", function (e)
// {
// keys[e.keyCode] = true;
// });
// window.addEventListener("keyup", function (e)
// {
// keys[e.keyCode] = false;
// });
}
// call initialization
init();
// Draw frames
setInterval( render, 16 );
function render()
{
get_keys();
}
function get_keys()
{
if (key.left === true) keyCode = 37;
if (key.up === true) keyCode = 39;
if (key.right === true) keyCode = 38;
if (key.down === true) keyCode = 40;
console.log("K: " + keyCode);
// add new element
lastKeys.push(keyCode);
if (lastKeys.length > 4)
{
// remove last element
lastKeys.pop();
}
console.log(lastKeys);
}
【问题讨论】:
标签: javascript keyboard html5-canvas