CraftyJS を使用してゲームを開発しようとしています。私は使用しています
- クラフティ 0.7.1
- クローム 50.0.2661.94
- ウィンドウズ10
- 2016 デル XPS15。
キーボード イベントの処理方法に奇妙な点があることに気付きました。これの多くは Chrome や、おそらく私の物理キーボードに関係していると思います。Crafty は、API を使用しているという点でのみ関連しています。
まず、これが私の SSCCE です。このコードは、キーが押されたときにキー配列にキーを追加し、離されたときにキーを削除し、1 秒ごとに配列をログアウトします。
<!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 は、左右両方の手で入力できない限り、一度に 4 つの文字キーの押下しか認識しないようです。たとえば、ASDFE を一度に押し続けると、次
[65, 83, 68, 70]
のようになります。 E キーをどれだけ叩いても、認識されないままです。しかし、たとえば ASDFJKL を押したままにすると、次のように表示されます[65, 83, 68, 70, 74, 75, 76]
。3 番目の矢印キーが下矢印でない限り、一度に認識される矢印キーは 2 つだけです。たとえば、LEFT、UP、RIGHT を押すと、次のようになります。
[37, 38]
ただし、LEFT DOWN RIGHT を押すと、次のようになります。[37, 39, 40]
いったいこれで何が起こっているのですか?私の推測では、私の指と私の JS の間の誰かが、誤ったキーの押下 (タイプミス) を巧みに修正しようとしているのですが、誰なのかはわかりません。
編集:これらのキーボードイベントの送信に失敗しているのは、キーボード自体(またはOS)であると思われます。しかし、私はまだこれを確認する良い方法を探しています.