I have a javascript code that supposed to have gravity, but when I tried to input keypresses, it stopped working entirely.
I tried changing it from if statements to a switch function, however, it still did not work, and their is no errors whatsoever.
Here is my code:
const stage = document.getElementById("stage"); //Gets the canvas
const ctx = stage.getContext("2d"); //Context
const PX = 16;
const S = 25;
stage.width = (PX * S);
stage.height = (PX * S);
const playerimg = new Image(); //Player Image
const floorimg = new Image(); //Floor Image
var playerx = 0; //Player X
var playery = 0; //PLayer Y
var floorx = 0; //Floor X
var floory = (stage.height-16); //Floor Y
const imageLoader = new Set([playerimg, floorimg]);
imageLoader.forEach(img => {
img.addEventListener("load", () => {
imageLoader.delete(img);
if (imageLoader.size === 0) main();
});
});
function main() {
const LEFT = 37, UP = 38, RIGHT = 39;
window.addEventListener("keydown", e => {
if (e.isComposing) return;
e.preventDefault();
let dx = 0, dy = 0;
if (e.keycode == LEFT) {
dx = -PX;
} else if (e.keycode == UP) {
if (playery != (floory-16)) {
dy = PX;
} else {
dy = -PX;
}
} else if (e.keycode == RIGHT) {
dx = PX;
}
playerx += dx;
playery += dy;
draw();
});
draw();
setTimeout(main, 50);
}
function draw() {
// Clear everything
ctx.clearRect(0, 0, stage.width, stage.height);
// Draw a quick grid for debugging
for (let c = 0; c < S; c += 1) {
for (let r = 0; r < S; r += 1) {
ctx.fillStyle = (c + (r % 2)) % 2 ? "#efefef" : "white"
ctx.fillRect(c * PX, r * PX, PX, PX);
}
}
// Draw player
ctx.drawImage(playerimg, playerx, playery);
floorx = 0;
for (let c = 0; c < S; c += 1) {
ctx.drawImage(floorimg, floorx, floory);
floorx += 16;
}
}
floorimg.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAB5JREFUOE9j/M/A8J+BAsA4agDDaBgwjIYBw7AIAwCl1B/xy1zUvwAAAABJRU5ErkJggg=="
playerimg.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAB5JREFUOE9jZPjP8J+BAsA4agDDaBgwjIYBw7AIAwCV5B/xAsMbygAAAABJRU5ErkJggg==";
Does anyone have any ideas? Much needed, thank you, I am not that experienced in javascript.
New contributor
Goofy Gunton is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.