onEvent("screenGamemode3", "keydown", function(event) { if (event.key == "Left"|| event.key == "a") { xloc = xloc - 10; } else if (event.key == "Right" || event.key == "d" ) { xloc = xloc + 10; } else if (event.key == "Down" || event.key == "s" ) { yloc = yloc + 20; } else if (event.key == "Up" || event.key == "w") { yloc = yloc - 50; } }); Quiero el else if (event.key == "Up" || event.key == "w") { yloc = yloc - 50; parte solo se puede hacer clic una vez y no se puede hacer clic dos veces
Muchas gracias de antemano
Podría realizar un seguimiento de la última tecla presionada, pero supongo que probablemente desee usar keyup en lugar de keydown . Este último se dispara continuamente, mientras que keyup solo se dispara una vez. O al menos hasta que el usuario vuelva a pulsar la misma tecla.
La forma más sencilla de utilizar una flag variable es configurarla como false de forma predeterminada y cuando se hace clic en KEYUP , configurarla como true . Y verifique también su flag variable en su condición else if . Aquí está el código:
let isKeyupPressed = false; window.addEventListener('keydown', event => { if (event.key == "ArrowLeft"|| event.key == "a") { // xloc -= 10; } else if (event.key == "ArrowRight" || event.key == "d" ) { // xloc += 10; } else if (event.key == "ArrowDown" || event.key == "s" ) { // yloc += 20; } else if (!isKeyupPressed && (event.key == "ArrowUp" || event.key == "w")) { // yloc -= 50; isKeyupPressed = true; console.log('Arrow Up invoke? ', event.key); // it will log only once } console.log(event.key); })No estoy seguro de entender lo que quieres hacer, pero ¿puede algo como esto resolver tu problema?
let isFirst = true; onEvent("screenGamemode3", "keydown", function(event) { if (event.key == "Left"|| event.key == "a") { xloc = xloc - 10; } else if (event.key == "Right" || event.key == "d" ) { xloc = xloc + 10; } else if (event.key == "Down" || event.key == "s" ) { yloc = yloc + 20; } else if ((event.key == "Up" || event.key == "w") && isFirst == true) { yloc = yloc - 50; } });