[英]Moving a sprite
我只是希望能够使用键W,A,S,D移动精灵“ kitty”。 因此,当我加载页面并按下键时,小猫图片不会移动,而且我无法弄清楚自己在做什么错。 谁能帮助我指出正确的方向?
我的代码:
<!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>
代替执行onkeydown="move(event)"
执行document.addEventListener("keydown", move)
。 比较干净
您的position
循环永远不会被调用。 我建议像window.setInterval(position, 10)
一样调用它window.setInterval(position, 10)
并将setTimeout
放到函数中。
这是一个工作示例:
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>
您也可以考虑将window.requestAnimationFrame()用于animationloop。
从未调用position
函数。 您缺少代码中的括号:
onLoad="position()"
您的事件正常触发,但是我目前看到两个问题:
keyPressed
与大写字母进行比较,而keyPressed
为小写字母。 因此,要么将字符串转换为大写,要么修正您的比较 yPos
和xPos
您实际上从未将其分配给xPos
因此它永远不会移动。 您只能在onload
分配它,而应该在move()
函数末尾调用position()
move()
函数
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.