Creat a const keys
, then keyup and keydown
const keys = {
up:{
pressed: false
},
right:{
pressed: false
},
down: {
pressed: false
}
,
left:{
pressed: false
}
}
e.preventDefault()
in the 'keydown'
event
addEventListener('keydown', e => { let key = e.keyCode switch (key){ case 38: e.preventDefault() keys.up.pressed = true break case 39: e.preventDefault() keys.right.pressed = true break case 40: e.preventDefault() keys.down.pressed = true break case 37: e.preventDefault() keys.left.pressed = true break } });
addEventListener('keyup', e => { let key = e.keyCode switch (key){ case 38: keys.up.pressed = false lastKey = 'up' break case 39: keys.right.pressed = false lastKey = 'right' break case 40: keys.down.pressed = false lastKey = 'down' break case 37: keys.left.pressed = false lastKey = 'left' break } });
Create an update()
method inside the Pacman
class to add the velocity to the position
class Pacman { constructor({ position, velocity }) { this.position = position this.velocity = velocity this.radius = 15 } draw() { c.beginPath() c.fillStyle = 'yellow' c.arc(this.position.x, this.position.y, this.radius, 0, Math.PI * 2) c.fill() c.closePath() } update(){ this.position.x += this.velocity.x this.position.y += this.velocity.y this.draw() } }
Adjust the velocity of the player inside of an animate()
function like so
function animate(){ requestAnimationFrame(animate) c.fillStyle = 'black' c.fillRect(0, 0, canvas.width, canvas.height) pacman.velocity.x = 0 pacman.velocity.y = 0 if (keys.up.pressed && lastKey != 'up') { pacman.velocity.y -= playerSpeed }else if(keys.right.pressed && lastKey != 'right'){ pacman.velocity.x += playerSpeed } else if (keys.left.pressed && lastKey != 'left'){ pacman.velocity.x -= playerSpeed }else if (keys.down.pressed && lastKey != 'down'){ pacman.velocity.y += playerSpeed } boundaries.forEach(el => { el.draw() }) pacman.update() } animate()