2

次のようなコードのブロックがあるとしましょう。

keysPressed = new Object();
document.onkeydown = function(e) {
    keysPressed[e.charCode] = true;
}
document.onkeyup = function(e) {
    keysPressed[e.charCode] = false;
}

keysPressed.wこれにより、理論的には、「w」が現在押されているかどうかを確認できるオブジェクトが残ります。

JavaScriptコンソールで、すべての属性が通常のように定義されていることがわかりますが、それらにアクセスしようとすると、属性が未定義であると表示されます。属性は、それらが定義されている関数内にローカルスコープを持っており、他の場所からはアクセスできないと思われます。たくさんのグローバル変数を作成せずにこの問題を解決する方法はありますか?

前もって感謝します!

4

1 に答える 1

1

ここでの問題charCodeは、数値を返すことです。したがって、プロパティを追加する代わりにw、数値のプロパティを追加します87String.fromCharCodeここで文字列表現を取得するために使用します

keysPressed = new Object();
document.onkeydown = function(e) {
    keysPressed[String.fromCharCode(e.charCode)] = true;
}
document.onkeyup = function(e) {
    keysPressed[String.fromCharCode(e.charCode)] = false;
}

これで、次のようなコードが機能します(小文字ではなく大文字のWを使用していることに注意してください)

if (keysPressed.W) {
  ...
}
于 2012-04-07T00:08:30.413 に答える