javascript - javascript中的平滑键盘输入
问题描述
我已经开始用 Javascript 编程,用 WebGL 制作一个 3D 应用程序。我需要以其他方式接收键盘输入,因为我这样做的方式是这样的:
var keys = {};
window.addEventListener("keydown", (e) => {
keys[e.which] = true;
updateKeys();
});
window.addEventListener("keyup", (e) => {
delete keys[e.which];
updateKeys();
});
function updateKeys() {
for(var i in keys) {
if(keys[87] === true) {
//Move
}
}
}
产生非常粗糙的结果并且有口吃。有什么方法可以让我获得流畅的输入吗?
解决方案
这是口吃,因为你的动作与关键事件一起运行。并且您的键事件利用event.repeat
,当您按住键时会发生这种情况。
你应该做两件事:
- 在您的
keydown
侦听器中,添加以下行以忽略重复按下:
if (e.repeat) return;
- 将您的移动逻辑移动到其他地方,即
window.requestAnimationFrame()
处理程序。
推荐阅读
- scroll - 有没有办法在仪表板中制作可滚动的部分?
- json - 状态消息:无法对嵌套资源执行请求的操作。未找到父资源“VMName”。(代码:ParentResourceNotFound)
- python - 我如何使用这个 for 循环到这个 webscraping stock 模块?
- python - 如何根据一组多对模式中两个模式的共现来修剪字符串?
- sql - LIMIT 不包含变量
- python - 有没有办法检查两个对象列表是否仅包含 Python 中相同类型的对象?
- reactjs - 在聚合物中反应 JSX?这是可能的?
- python - 如何使用作为列表的数据框值
- saml - 使用 GSuite Google Workspace 配置 SCIM 用户配置
- python - 如果不存在,如何使用 python 创建 postgres 用户/角色