我觉得这是一个完整的klutz,我有这个工作,然后我不小心忘了保存它!我是个白痴。我花了最后一天试图重新创造我所拥有的东西,但我不能这样做。基本上(从我上次保存)我有这个:
function canvasMove(e) {
if(!e) var e = window.event;
var downcheck;
var upcheck;
var leftcheck;
var rightcheck;
if(e.keyCode == '38') {
if(up + down == 0) downcheck = false;
else downcheck = true;
e.preventDefault();
}
if(e.keyCode == '40') {
if(up + down > HEIGHT - 110) upcheck = false;
else upcheck = true;
e.preventDefault();
}
if(e.keyCode == '37') {
if(left + right == 0) rightcheck = false;
else rightcheck = true;
e.preventDefault();
}
if(e.keyCode == "39") {
if(left + right > WIDTH - 110) leftcheck = false;
else leftcheck = true;
e.preventDefault();
}
if(leftcheck == true) { left += 10; counting() };
if(rightcheck == true) { right -= 10; counting() };
if(upcheck == true) { up += 10; counting(true) };
if(downcheck == true) { down -= 10; counting(true) };
}
问题当然是Javascrpt不支持检查两个键是否同时被按下的能力。我想要完成的是当用户按下并离开时他们将对角移动。忽略“计数”功能,只是为了跟踪用户移动了多少。
我设法用其他方式和if语句完成了这个,不能少!所以我想知道你们是否可以试一试。每个键if语句中的第一个if语句是这样的,用户不能离开画布框。然后我有一个通过重绘画布来移动用户的函数。
function redraw() {
clear(draw);
draw.fillStyle = 'rgba(0,0,0,0.5)';
draw.fillRect(left + right, up + down, '100', '100');
}
“清除”功能只是一个简单的功能,可以清除整个画布。这完全由init函数控制,如下所示:
function init() {
canvas = document.getElementById('game');
HEIGHT = canvas.height;
WIDTH = canvas.width;
draw = canvas.getContext('2d');
setInterval(redraw, 30);
document.onkeydown = canvasMove;
}
答案 0 :(得分:1)
你的-check标志需要是全局变量而不是函数范围的变量,否则它们永远不会在keydown事件之间保持设置(一次只处理一个键)。您还需要一个键盘事件处理程序,它将在释放键时取消设置正确的标志。