Javascript:当同时按下两个键时,留下其中一个也会影响另一个的听众
Javascript : When having pressed 2 keys simultaneously down, leaving one of them influences the listener of the other too
我正在使用Three.js库创建一个webGL游戏。我用键盘箭头在空间中创造动作。我想让用户通过按下左右箭头和上下箭头来同时旋转和移动。出于这个原因,我创建了一个包含所有所需钥匙状态的地图。使用的代码如下:
var keyMap = [];
document.addEventListener("keydown", onDocumentKeyDown, true);
document.addEventListener("keyup", onDocumentKeyUp, true);
function onDocumentKeyDown(event){
var keyCode = event.keyCode;
keyMap[keyCode] = true;
executeMovement();
}
function onDocumentKeyUp(event){
var keyCode = event.keyCode;
keyMap[keyCode] = false;
executeMovement();
}
function executeMovement(){
var cameraNeck = cameraEquipment.getNeck();
if(keyMap[37] == true){
//rotate left
}
if(keyMap[39] == true){
//rotate right
}
if(keyMap[38] == true){
//move front
}
if(keyMap[40] == true){
//move back
}
它是有效的,这意味着当用户同时按下两个键时,他会同时移动和旋转。但是,它存在以下问题。例如,假设用户首先按下向上箭头,然后(不离开)按下向左箭头。如果他离开了第一个按下的按钮(向上箭头),一切都按预期进行,用户向左旋转。但是,如果用户最后按下按钮(向左箭头),则用户将停止移动和旋转这两个按钮。
似乎在按键的顺序中,一个按钮的"keyUp"事件会触发另一个的"keyUp",或者类似的事情。我尝试了许多不同的调试方法,并开始考虑整个实现是否存在问题。
正如我所认为的,在保存键状态的映射的实现中没有错误。这是成功的工作。问题出在函数executeMovement()
上,它只在"keydown"或"keyup"事件后调用一次。所以,这就是为什么用户在按下一个键的情况下停止移动的原因。
这个函数应该在浏览器更新框架时调用的函数内部调用。因此,固定代码如下:
var keyMap = [];
document.addEventListener("keydown", onDocumentKeyDown, true);
document.addEventListener("keyup", onDocumentKeyUp, true);
function onDocumentKeyDown(event){
var keyCode = event.keyCode;
keyMap[keyCode] = true;
}
function onDocumentKeyUp(event){
var keyCode = event.keyCode;
keyMap[keyCode] = false;
}
function executeMovement(){
''same code
}
var render = function () {
requestAnimationFrame( render );
renderer.render(scene, cameraEquipment.getCamera());
executeMovement()
};
render();
相关文章:
- Javascript:当同时按下两个键时,留下其中一个也会影响另一个的听众
- 在元素数组上循环只会影响最后一个元素
- Navgoco不是一个影响密码保护页面的功能
- 挖空视图模型函数仅影响最后一个实例
- 如何使外部按钮只影响类的一个实例
- D3-使用一个SVG点击事件来影响另一个
- Backbone Collection.每个方法都会影响每隔一个模型
- Hov 我用 javascript 改变风格,只影响第一个 ul
- Jquery 只影响悬停在类中的一个元素
- 影响类的所有成员而不是一个元素事件的插件正在发生
- 此 JavaScript 代码是否也会通过禁用一个键来影响其他按键事件
- 为什么单击一个按钮会影响 jQuery Ajax 中的所有按钮
- 悬停在第一个 DIV 上会影响所有其他第一个 DIV
- AngularJS:如果ng模型被另一个模型填充,如何让它受到影响
- 一个 F.Select 是否在同一表单中影响另一个?(不需要)
- 影响当前外部元素中的另一个元素
- Jquery - 如何在 drupal 视图中只影响一个节点
- 将鼠标悬停在 ol 上并影响具有多个版本的同一页面上的另一个特定元素
- 创建一个带有按钮的定时滑块,这些按钮可以影响表格不同部分的文本和图像
- 在不影响第一行的情况下,每隔一行缩进一个表.html/css/js/jQuery