10100011001
10100011001

Reputation: 85

Move player javascript

I do not understand this part :

self.keyDown = function() { keys[event.keyCode] = 1; };

self.keyUp = function() { delete (keys[event.keyCode]); };

explain what this code does, please)

MVC : Controller:

   this.init = function() {
      keys = {};
   }

   self.trgt = function(){
      if(this.event.target === myContainer.querySelector('#start')) {
         myModel.startGame();
         window.addEventListener('keydown', self.keyDown);
         window.addEventListener('keyup', self.keyUp);
      }
   }

   self.keyDown = function() {
    keys[event.keyCode] = 1;
   };

   self.keyUp = function() {
     delete (keys[event.keyCode]);
   };

  self.moveHero = function(keycode) {
    myModel.moveHero(keycode);
  };

  setInterval(function() {  
     for (let keycode in keys) {
        self.move(keycode);
     }
  }, 20);

Model:

 if (!sometask) {
   if (keycode == 37 || keycode == 65) {
     self.moveLeft();
   }
   if (keycode == 38 || keycode == 87) {
     self.moveTop();
   }
   if (keycode == 39 || keycode == 68) {
     self.moveRight();
   }
   if (keycode == 40 || keycode == 83) {
     self.moveBottom();
   }
 }
};

Upvotes: 0

Views: 130

Answers (3)

Pac0
Pac0

Reputation: 23174

These lines are to set functions that will be called each time the event keyDown (press a key) or keyUp (release the key) are called.

So let's focus on the actual code inside the function :

for keyDown, it sets a variable in a dictionary to a value. for instance, if you press down 'a', 'a' key on the keyboard has some int value which is 65 (see https://keycode.info/), and it will set the keys[65] = 1.

As long as you keep the button press, this value will stay, but as soon as you release it, the value is unset by using delete .

And so on for each keyboard key.

Then the main loop of the game will look which variables are set (by using "for ... in keys), and will execute a move function for each variable that has a special values, corresponding, I guess, to a-w-s-d or left-up-right-down.

Upvotes: 0

Joe Lissner
Joe Lissner

Reputation: 2473

the code in question:

self.keyDown = function() { keys[event.keyCode] = 1; };

self.keyUp = function() { delete (keys[event.keyCode]); };

is just assigning which keys are currently pressed. Lets say event.keyCode = 37, In this instance your keys variable, which is an object, will now have a property that says keys[37] = 1, and it will remain that way until the keyUp function is called, deleting it. Whiile keys[37] = 1, the character will continue moving left, and this will stop once that key is deleted.

Upvotes: 1

Bruno Francisco
Bruno Francisco

Reputation: 4240

self.keyDown = function() { keys[event.keyCode] = 1; };

self.keyUp = function() { delete (keys[event.keyCode]); };

Translating to plain English:

  • If the user press the keyDown (number 40) then set the key 40 in the object keys to 1.

  • If the user press the keyUp (number 38) then delete from the keys object the key 38

Upvotes: 0

Related Questions