简体   繁体   中英

Javascript, how do I make the up key only pressed once

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;
  }
});

I want the else if (event.key == "Up" || event.key == "w") { yloc = yloc - 50; part only clickable once and not be able to get clicked twice

Thank you so much in advance

You could keep track of the last pressed key, but I'm guessing you probably want to use keyup instead of keydown . The latter is fired continuously while keyup is only fired once. Or at least until the user presses the same key again.

The easiest way to use a flag variable , by default set it to false and when KEYUP is clicked - set it to true . And check also your flag variable in your else if condition. Here is the code:

 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); })

I'm not sure I understand what you want to do, but can something like this resolve your problem?

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;

    }
});

Maintaining a count flag & using it in the if(), can do the job.
refer following code.

let keyPressCount  = 0;
if(){
    //your code
}
else if ((event.key == "Up" || event.key == "w") && keyPressCount === 0) {
    yloc = yloc - 50;  
    keyPressCount = 1
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM