一点点解释不会出错:-)

时间:2016-11-14 18:43:42

标签: javascript

  var keyState = [];
  const KEY_UP = 38;
  const KEY_DOWN = 40;
  const KEY_W = 87;
  const KEY_S = 83;


const keyEventLogger =  function (e) {  keyState[e.keyCode] = e.type =='keydown';}
window.addEventListener("keydown", keyEventLogger);
window.addEventListener("keyup", keyEventLogger);

以上是一段我无法理解的代码。这里的用户发布了它,以回应有人询问玩家的移动。虽然我理解其中的大部分(我认为),我不明白一行特别。从我收集的内容:

var keyState = [];

创建并清空名为Key state的数组

const KEY_UP = 38;
const KEY_DOWN = 40;
  const KEY_W = 87;
  const KEY_S = 83;

这些只是变量,定义了某些键的密钥代码

const keyEventLogger =  function (e) {  keyState[e.keyCode] = e.type =='keydown';}

这对我来说是一个令人困惑的界限。它正在创建一个名为keyeventlogger的变量,然后将它等同于它传递的函数。然后该函数将e的键码添加到数组中,并将其等于e.type(无论是什么),然后将其设置为keydown,这是下面的事件监听器。有人可以尽力向我解释这行代码:-)

非常感谢 詹姆斯

4 个答案:

答案 0 :(得分:0)

函数是JavaScript中的第一类对象。

它们可以像任何其他值一样分配给变量,常量和对象属性。同样,它们可以作为参数传递给其他函数。

答案 1 :(得分:0)

e.type =='keydown'是一个平等测试。结果为truefalse,具体取决于e.type是否等于keydown。 它是一个布尔值,然后分配给keyState数组的元素。

基本上,当您按下键盘上的某个键时,它会为与该键盘字母对应的数组中的元素指定“true”。释放密钥时,元素变为false。游戏逻辑将读取这些元素以确定用户当前是否正在尝试向特定方向移动。

答案 2 :(得分:0)

这只创建了一个到目前为止按下的所有键的数组及其当前状态。如果按下键,则true。如果未按下该键,则false

答案 3 :(得分:0)

const keyEventLogger = function (e) { keyState[e.keyCode] = e.type =='keydown';}

这一行是为变量keyEventLogger分配一个匿名函数。在javascript中,函数是第一类对象,因此可以将它们分配给变量并传递。

window.addEventListener("keydown", keyEventLogger);

请注意,我们正在将keyEventLogger变量传递给window.addEventListener方法。这是说 - 每次有keydown事件时,触发keyEventLogger功能。现在,我们来看看这个函数:

keyState[e.keyCode] = e.type =='keydown';

此行根据按下的键类型在keyState数组中创建(或更新)条目。我们已为keydownkeyup事件分配了事件监听器,因此这是唯一的两种可能性。 Javascript首先评估此行的e.type == 'keydown'部分。如果按下的键等于keydown,则评估为true,否则为false。因此,keyState数组中存储的值true事件keydownfalse事件keyup - 数组索引为关键代码(keydown为40,keyup为38)。

希望这有帮助。