我正在尝试使用 CraftyJS 开发游戏。我在用着
- 狡猾的 0.7.1
- 铬 50.0.2661.94
- 视窗 10
- 2016 年戴尔 XPS15。
我注意到键盘事件的处理方式有些奇怪。我猜这很大程度上与 Chrome 甚至我的物理键盘有关,而 Crafty 仅与我使用它的 API 有关。
首先,这是我的 SSCCE。此代码在按下时将键添加到键数组中,在释放时将其删除,并每秒注销一次数组。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>keyTest</title>
<script src="../crafty.js"></script>
<script>
window.onload = function(){
Crafty.init(window.innerWidth, window.innerHeight, document.getElementById('game'));
var keys = [];
var keyDown = function(e){
console.log("KeyDown " + e.key);
keys.push(e.key);
};
var keyUp = function(e){
console.log("KeyUp " + e.key);
keys.splice(keys.indexOf(e.key), 1);
};
Crafty.e("Keyboard").bind("KeyUp", keyUp).bind("KeyDown", keyDown);
Crafty.e("Delay").delay(function(){console.log(keys)}, 1000, -1);
};
</script>
</head>
<body>
<div id="game"></div>
</body>
</html>
我注意到一些奇怪的行为:
首先,看起来 Crafty 一次只能识别四个字母按键,除非它们可以用左右手输入。例如,立即按住 ASDFE 会导致:
[65, 83, 68, 70]
无论我如何抨击 E 键,它仍然无法识别。但是,例如,如果我按住 ASDFJKL,那么我会看到:[65, 83, 68, 70, 74, 75, 76]
.一次只能识别两个箭头键,除非第三个是向下箭头。例如,按 LEFT、UP、RIGHT 会导致:
[37, 38]
但 LEFT DOWN RIGHT 会导致:[37, 39, 40]
这到底是怎么回事?我的猜测是,我的手指和我的 JS 之间的某个人正试图巧妙地纠正错误的按键(错别字),但我不知道是谁,也不知道有什么规则来管理这个。
编辑:我怀疑是我的键盘本身(或操作系统)未能发送这些键盘事件。但我仍在寻找一种确认这一点的好方法。