我使用html和CSS在div中创建了一个对象,以使其成为我正在制作的游戏的播放器,并且按下箭头键时无法移动播放器。有人知道我的代码有什么问题吗?
这是Javascript:
var player = document.getElementById("player");
var velocity = 5;
let player = {
height:20,
width:20,
x:200,
y:200
}
document.addEventListener("keydown", function(event){
if(event.keyCode === 37){
player.x -= velocity:
else if(event.keyCode ===38){
player.y -=velocity;
}
});
怎么了?
答案 0 :(得分:1)
使用简单的Javascript
移动div,只需在文档上添加switch keydown事件,然后自定义div(玩家)的CSS左上角
var player = $('#player');
var velocity = 5;
$(document).keydown(function(e) {
switch (e.which) {
case 37:
player.css('left', player.offset().left - velocity);
break;
case 38:
player.css('top', player.offset().top - velocity);
break;
case 39:
player.css('left', player.offset().left + velocity);
break;
case 40:
player.css('top', player.offset().top + velocity);
break;
}
})
#player {
background: #ccc;
height: 50px;
width: 50px;
position: absolute;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<html>
<body>
<div id="player"></div>
</body>
</html>
答案 1 :(得分:0)
除了Ibnelaiq的答案外,这是一种确保玩家能够更好地移动的方法-
var key = [];
function keys(db, e) {
var code = e.which || e.keyCode;
if (db == false && key.includes(code) === false) {
key.push(code);
} else if (db === true) {
key.splice(key.indexOf(code));
}
}
setInterval(() => {
console.log(key);
}, 30);
document.getElementsByClassName('game')[0].getContext('2d').fillText('Click here and press keys', 10, 10);
.game {
background-color: #f1f1f1;
outline: none;
border: 1px solid black;
}
<canvas class='game' tabindex='1' width='400px' height='290px' onkeydown='keys(false, event)' onkeyup='keys(true, event)'>
这是什么:
<canvas>
(尽管不限于<canvas>
)等待keydown
并将event.keycode
或event.which
添加到数组中。它还等待keyup
,并删除从数组释放的任何event.keycode
或event.which
。
setInterval
就可以将阵列登录到控制台。代码的最后一行是将文本写入<canvas>
的地方。
当然,您可以将他的switch
语句添加到setInterval
中,但只能在其中添加。