Click here to Skip to main content
15,909,445 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
In Html and Javascript I am trying to make the character move with the wasd keys. I have tried everything I can, and I can't get it to work. Can you tell me how to do it. Also, can you be pretty specific... I kind of a beginner. Here is the code.


JavaScript
<!DOCTYPE html>
<canvas id="ctx" height="800" width="1500" style="border:1px solid #000000;"></canvas>
<script>

 var ctx = document.getElementById("ctx").getContext("2d");

  var player = {
    x: 750,
    y: 400,
    pressW: false,
    pressS: false,
    pressA: false,
    pressD: false,
  };

  ctx.fillStyle = "blue";
  ctx.rect(player.x, player.y, 50,50);

  document.onkeydown = function(event){
    if (event.keyCode == 87) //w
      player.pressW = true;
    else if (event.keycode == 83) //s
      player.pressS = true;
    else if (event.keyCode == 65) //a
      player.pressA = true;
    else if (event.keycode == 68) //d
      player.pressD = true;
  }

  document.onkeyup = function(event){
    if (event.keyCode == 87) //w
      player.pressW = false;
    else if (event.keycode == 83) //s
      player.pressS = false;
    else if (event.keyCode == 65) //a
      player.pressA = false;
    else if (event.keycode == 68) //d
      player.pressD = false;
  }

  function updatePlayerPosition(){
    if (player.pressW == true)
      player.y -= 10;
    if (player.pressS == true)
      player.y += 10;
    if (player.pressA == true)
      player.x -= 10;
    if (player.pressD == true)
      player.x += 10;
  }

  function drawPlayer(){
    ctx.fillStyle = "blue";
    ctx.fillRect(player.x, player.y, 50,50);
  }

  function Update(){
    ctx.clearRect(0,0,1500,800)
    updatePlayerPosition();
    drawPlayer();
  }

setInterval(Update, 100);

</script>
<style>

  canvas {
  padding-left: 0;
  padding-right: 0;
  margin-left: auto;
  margin-right: auto;
  display: block;
}

</style>


What I have tried:

I have tried everything I can, and I can't get it to work
Posted
Updated 12-Aug-16 13:23pm
Comments
Patrice T 12-Aug-16 19:17pm    
No Repost please.

1 solution

Hi,

The only problem with your code is of Case sensitivity.

document.onkeydown = function(event){
    if (event.keyCode == 87) //w
      player.pressW = true;
    else if (event.keyCode == 83) //s
      player.pressS = true;
    else if (event.keyCode == 65) //a
      player.pressA = true;
    else if (event.keyCode == 68) //d
      player.pressD = true;
  }
 
  document.onkeyup = function(event){
    if (event.keyCode == 87) //w
      player.pressW = false;
    else if (event.keyCode == 83) //s
      player.pressS = false;
    else if (event.keyCode == 65) //a
      player.pressA = false;
    else if (event.keyCode == 68) //d
      player.pressD = false;
  }


Try the below code to solve your problem:


<!DOCTYPE html>
<canvas id="ctx" height="800" width="1500" style="border:1px solid #000000;"></canvas>
<script>
 
 var ctx = document.getElementById("ctx").getContext("2d");
 
  var player = {
    x: 750,
    y: 400,
    pressW: false,
    pressS: false,
    pressA: false,
    pressD: false,
  };
 
  ctx.fillStyle = "blue";
  ctx.rect(player.x, player.y, 50,50);
 
  document.onkeydown = function(event){
    if (event.keyCode == 87) //w
      player.pressW = true;
    else if (event.keyCode == 83) //s
      player.pressS = true;
    else if (event.keyCode == 65) //a
      player.pressA = true;
    else if (event.keyCode == 68) //d
      player.pressD = true;
  }
 
  document.onkeyup = function(event){
    if (event.keyCode == 87) //w
      player.pressW = false;
    else if (event.keyCode == 83) //s
      player.pressS = false;
    else if (event.keyCode == 65) //a
      player.pressA = false;
    else if (event.keyCode == 68) //d
      player.pressD = false;
  }
 
  function updatePlayerPosition(){
    if (player.pressW == true)
      player.y -= 10;
    if (player.pressS == true)
      player.y += 10;
    if (player.pressA == true)
      player.x -= 10;
    if (player.pressD == true)
      player.x += 10;
  }
 
  function drawPlayer(){
    ctx.fillStyle = "blue";
    ctx.fillRect(player.x, player.y, 50,50);
  }
 
  function Update(){
    ctx.clearRect(0,0,1500,800)
    updatePlayerPosition();
    drawPlayer();
  }
 
setInterval(Update, 100);
 
</script>
<style>
 
  canvas {
  padding-left: 0;
  padding-right: 0;
  margin-left: auto;
  margin-right: auto;
  display: block;
}
 
</style>


Thanks,
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900