打字稿:如何在有限的时间内捕获键盘事件

时间:2017-03-09 17:22:44

标签: javascript typescript synchronization typescript2.0

我正在编写某种类型的视频游戏,玩家轮流N秒,在N秒内他们可以输入键盘输入。一旦N秒过去,输入的输入将被返回(例如在数组中),处理后将执行一些操作。

执行流程类似于以下内容:

while (!gameOver) {
   // do some stuff like knowing who's player turn is it
   var enteredInput = captureKeyboardInputsFor(seconds);
   // process input & do actions
}

我确实已经很好地定义了游戏逻辑,但是我试图弄清楚如何使用TypeScript执行此操作,保持我的循环游戏同步(当玩家轮流玩),拥有

var enteredInput = captureKeyboardInputsFor(seconds);

等待直到N秒过去。

编辑:

另外,我正在考虑拥有CPU播放器的可能性。在这种情况下,不需要等待或捕获输入:

while (!gameOver) {
   // do some stuff like knowing who's player turn is it

   var enteredInput;

   if (player.isHuman()) {
      enteredInput = captureKeyboardInputsFor(seconds);
   } else {
      enteredInput = calculateRandomCPUPlayerInput();
   }

   // process input & do actions
}

1 个答案:

答案 0 :(得分:2)

使用setTimeout函数传递N秒后,您可以取消绑定captureKeyboardInputs侦听器,如下所示。这是你在找什么:

let fn = () => {
    // unbind capture keys event

    // process input & do actions
};

let a = setTimeout(this.fn, seconds * 1000);

如果你需要修改它,那么你可以这样做:

clearTimeout(a);
if (isProcessNow) {
    this.fn();
} else {
    a = setTimeout(this.fn, newSeconds * 1000);
}