Darekia
Darekia

Reputation: 1

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

Upvotes: 0

Views: 63

Answers (4)

Robin
Robin

Reputation: 5427

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

Upvotes: 0

Kuldeep J
Kuldeep J

Reputation: 552

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
}

Upvotes: 0

Elias
Elias

Reputation: 90

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;

    }
});

Upvotes: 0

DerLola
DerLola

Reputation: 3918

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.

Upvotes: 1

Related Questions