按多个键,但需要某些键只触发一次,直到在JavaScript中按下为止

按多个键,但需要某些键只触发一次,直到在JavaScript中按下为止,javascript,Javascript,我正在使用W3Schools()上的多键方法。 我只需要特定的键触发一次直到按下,即88和90(X和Z) 代码: var-keys=[];//密钥数组 onkeydown=onkeyup=功能(e){ e=e | | event;//处理IE keys[e.keyCode]=e.type=='keydown'; } 函数键输入(){ 如果(x>0-(偏移量x右[件][旋转]*20)和键[37]){ x-=20 }//左键 如果(x

我正在使用W3Schools()上的多键方法。 我只需要特定的键触发一次直到按下,即88和90(X和Z)

代码:

var-keys=[];//密钥数组
onkeydown=onkeyup=功能(e){
e=e | | event;//处理IE
keys[e.keyCode]=e.type=='keydown';
}
函数键输入(){
如果(x>0-(偏移量x右[件][旋转]*20)和键[37]){
x-=20
}//左键
如果(x<180+(偏移量x左[件][旋转]*20)和键[39]){
x+=20
}//右键
如果(键[40]){
y+=20;
}//向下键
如果(键[90]){
旋转-=1;
}//Z键
如果(键[88]){
旋转+=1;
}//X键
}

问题在于,只要按住按键,按键处理程序就会启动。 我建议添加一个全局变量released,一旦z或x被释放,它就会被设置为true。 现在,您只需检查是否按下了例如z,如果released==true-如果是,旋转对象并将release设置为false

以下是一个示例:

var canvas=document.createElement(“canvas”);
画布宽度=400;
帆布高度=300;
var context=canvas.getContext(“2d”);
document.body.appendChild(画布);
变量播放器={
xPos:110,
yPos:110,
轮换:0,
宽度:24,
身高:24
};
var键=[];
var=真;
window.addEventListener('keydown',函数(e){
键=(键| |[]);
键[e.keyCode]=真;
});
window.addEventListener('keyup',函数(e){
密钥[e.keyCode]=假;
如果(e.keyCode==88 | | e.keyCode==90){
释放=真;
}
});
函数循环(){
如果(键[37]){
player.xPos-=10;
}
如果(键[39]){
player.xPos+=10;
}
如果(键[90]&释放){
player.rotation--;
释放=假;
}
如果(键[88]&已释放){
player.rotation++;
释放=假;
}
clearRect(0,0,canvas.width,canvas.height);
context.fillStyle=“红色”;
context.save();
context.rotate(player.rotation*Math.PI/180);
context.fillRect(player.xPos、player.yPos、player.width、player.height);
restore();
}

var间隔=设置间隔(循环,20)您想问的问题是什么?你能再具体一点吗?
var keys = []; // Array of keys
onkeydown = onkeyup = function(e) {
    e = e || event; // to deal with IE
    keys[e.keyCode] = e.type == 'keydown';
}

function keyInputs() {

    if (x > 0 - (offsetXright[piece][rotation] * 20) && keys[37]) {
        x -= 20
    } //Left key

    if (x < 180 + (offsetXleft[piece][rotation] * 20) && keys[39]) {
        x += 20
    } //Right key

    if (keys[40]) {
        y += 20;
    } //Down key

    if (keys[90]) {
        rotation -= 1;
    } //Z key

    if (keys[88]) {
        rotation += 1;
    } //X key 
}