I simply want to be able to move the the sprite "kitty" using the keys W,A,S,D. So when i load the page and press the keys the kitty picture does not move and i can't figure out what i'm doing wrong. Can anyone help point me in the right direction?
my code:
<!DOCTYPE html>
<html>
<head>
<title>Project 3</title>
<style>
div.box{ width: 600px; height: 400px; border: 5px solid black;
margin: auto; position: relative; }
</style>
</head>
<body onLoad ="position" onKeyDown = "move(event)">
<script>
var dx = 5;
var dy = 5;
var xPos = 0;
var yPos = 0;
function position()
{
kitty = document.getElementById("sprite");
kitty.style.left = xPos+"px";
kitty.style.top = yPos+"px";
setTimeout("position()",10);
}
function move(event)
{
var keyPressed = String.fromCharCode(event.keyCode);
if (keyPressed == "W")
{
xPos -= dx;
}
else if (keyPressed == "D")
{
xPos += dx;
}
else if (keyPressed == "S")
{
yPos -= dy;
}
else if (keyPressed == "A")
{
yPos += dy;
}
}
</script>
<div class="box">
<img src="sprite.jpg" alt="kitty" id="sprite" width="70px"
style="position: absolute; left: 0px; top: 0px;">
</div>
</body>
</html>
Instead of doing onkeydown="move(event)"
do document.addEventListener("keydown", move)
. It's cleaner.
You're position
loop is never called. I recommend calling it like window.setInterval(position, 10)
and drop the setTimeout
in the function.
Here's a working example:
var dx = 5; var dy = 5; var xPos = 0; var yPos = 0; function position() { kitty = document.getElementById("sprite"); kitty.style.left = xPos + "px"; kitty.style.top = yPos + "px"; setTimeout(position, 10); } function move(event) { var keyPressed = String.fromCharCode(event.keyCode); if (keyPressed == "W") { yPos -= dy; } else if (keyPressed == "D") { xPos += dx; } else if (keyPressed == "S") { yPos += dy; } else if (keyPressed == "A") { xPos -= dx; } } document.addEventListener("keydown", move) position();
#sprite { position: absolute; }
<div class="box"> <img src="https://placekitten.com/g/50/50" alt="kitty" id="sprite" width="70px" style="position: absolute; left: 0px; top: 0px;" /> </div>
You can also consider using window.requestAnimationFrame() for the animationloop.
The position
function is never called. You are missing the parantheses in the code:
onLoad="position()"
Your events are properly firing, however there are 2 issues that I currently see:
keyPressed
to uppercase letters, meanwhile keyPressed
is lowercase. So either convert the string to uppercase, or fix your comparison yPos
and xPos
you never actually assign it to the sprite - therefore it is never going to move. You only assign it onload
while you should just call the position()
function at the end of the move()
function
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.