JavaScript 事件侦听器使字符在按右箭头键时向右移动 [英] JavaScript eventlistener making a character move right on arrow-right key press
问题描述
我有一个简单的 JScript HTML 和 CSS 游戏,在该游戏中,角色必须跳跃,但也可以在按下右箭头时向右移动.我有跳转功能,但在尝试复制它以创建右箭头功能时,它不起作用.
所需的输出: 修正当前代码,使按下右箭头时,角色也可以向右移动,也可以跳跃.按下右箭头键后,角色会继续向右移动.在 keyup 上,它会停止(我是否必须为 keyup 和这种可能性创建另一个动画)或者肯定有更简单的方法?
使用更新后的解决方案,它向右移动,但随后跳回到位置 left:0 而不是停留在它移动的位置.
说明:这是一种可接受的编码方式,还是整个代码都应该在事件侦听器中?(例如整个游戏循环)添加额外按键移动功能的最佳实践是什么.调用这样的 CSS 动画是可以接受的还是不好的做法,如果不能,为什么?
我的 JavaScript
var character = document.getElementById("character");var敌人 = document.getElementById(敌人");函数跳转(){if(character.classlist!=动画"){character.classList.add(动画");}设置超时(功能(){character.classList.remove(动画");},500);}功能右(){if(character.classlist!=正确"){character.classList.add("right");}设置超时(功能(){character.classList.remove(右");},500);}var checkDead =setInterval(function(){var characterTop = parseInt(window.getComputedStyle(character).getPropertyValue("top"));var敌人Left = parseInt(window.getComputedStyle(enemy).getPropertyValue(left"));console.log(characterTop);//在处理 css 时将其注释掉/*如果(敌人左<30 &&敌人左> 0 &&字符顶部>=360){敌人.style.animation =无";//移除动画敌人.style.display =无";alert(戳.....我让你在那里!");}*/},10);addEventListener(keyup", function(e) {如果(e.keyCode == 38)跳转()})addEventListener(keyright", function(e) {if(e.keyCode == 40) right()})
我为 keyright 添加的事件侦听器基于用于 keyup 的事件侦听器(有效).
addEventListener("keyright", function(e) {if(e.keyCode == 40) right()})
动画在 CSS 中生成
<代码>*{填充:0;边距:22;}#游戏{宽度:500px;高度:500px;边框:4px 实心 #171918;}#特点{宽度:30px;高度:120px;背景颜色:绿色;位置:相对;顶部:320px;边框半径:20px;/*动画:跳跃300ms */}/* 名为 animate 的新类 */.animate{动画:跳跃500ms;}.对{动画:右 500 毫秒;}#敌人{宽度:60px;高度:60px;背景颜色:红色;边框半径:14px;位置:相对;顶部:320px;左:440px;动画:moveenemy 1s 无限线性;}@keyframes moveenemy{0%{left:440px;}50%{top:58px;}100%{left:0px;顶部:320x;}}@关键帧跳转{0%{顶部:380px;}30%{top:50px;}50%{top:40px;}100%{top:380px;}}@关键帧正确{0%{左:0px;}100%{left:30px;}}/* 添加天空*/#天空{宽度:500px;高度:340px;背景颜色:天蓝色;位置:绝对;顶部:118px;}/* 添加地面 */#地面{宽度:500px;高度:170px;背景色:素色;位置:绝对;顶部:450px;}
HTML
<html lang="en"><头><元字符集=UTF-8"><title>文档</title><link rel="样式表";href="style.css">头部><身体><h1>B</h1><p>战斗</p><div id="游戏"><div id=天空"></div><div id="ground"></div><div id=敌人"></div><div id="字符"></div>
<script src="script.js"></script>