James Lewis
James Lewis

Reputation: 69

javascript jumping character not working

I'm having a few issues with my code. Can't get my cube to jump. Take a look at my code and let me know if you can help please.

My left, right and duck abilities all currently work at desired level, but I cannot get my cube to jump. I've been trying for three days and can't find anything online. My javascript is embedded within a tag in a html page.

var canvas = document.getElementById("gameCanvas");

var ctx = canvas.getContext("2d");

var coinRad = 8;
var coinX = 40;
var coinY = 80;

var x = 20;
var y = 510;
var w = 30;
var h = 50;

var rightPressed = false;
var leftPressed = false;

var ducked = false;
var jumping = false;

document.addEventListener("keydown", keyDownHandler, false);
document.addEventListener("keyup", keyUpHandler, false);

function keyDownHandler(e) {
  if (e.keyCode == 39) {
    rightPressed = true;
  } else if (e.keyCode == 37) {
    leftPressed = true;
  } else if (e.keyCode == 40) {
    ducked = true;
  } else if (e.keycode == 32) {
    jumping = true;
  }
}


function keyUpHandler(e) {
  if (e.keyCode == 39) {
    rightPressed = false;
  } else if (e.keyCode == 37) {
    leftPressed = false;
  } else if (e.keyCode == 40) {
    ducked = false;
  } else if (e.keycode == 32) {
    jumping = false;
  }
}

function drawCube() {
  ctx.beginPath();
  ctx.rect(x, y, w, h);
  ctx.fillStyle = "Green";
  ctx.fill();
  ctx.closePath();
}

function run() {
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  if (leftPressed) {
    if (x > 0) {
      x -= 2.5;
    }
  } else if (rightPressed) {
    if (x < canvas.width - w) {
      x += 2.5;
    }
  }
  if (jumping) {
    y -= 10;
    h -= 10;
  }
  if (ducked) {
    y = 535;
    h = 25;
  } else {
    y = 510;
    h = 50;
  }
  drawCube();
}

setInterval(run, 10);
<canvas id="gameCanvas"></canvas>

Upvotes: 0

Views: 145

Answers (2)

J Smith
J Smith

Reputation: 147

Additionally, your keyCode check is improperly capitalized for the jumping condition.

else if (e.keyCode == 40) {
   ducked = false;
} else if (e.keycode == 32) {  //should be keyCode
   jumping = false;
}

Upvotes: 1

mariodiniz
mariodiniz

Reputation: 102

because when the run method end, you do this.

if (jumping) {
    y -= 10;
    h -= 10;
}
if (ducked) {
    y = 535;
    h = 25;
} else {
    y = 510;
    h = 50;
}

even if you change the values from Y and H, their values always change to 510 and 50 respectively, because the else in ducked condition.

Remove this else or find another logic to do the same

Upvotes: 0

Related Questions