網站搜尋

javascript - Typescript:如何在有限時間內捕捉鍵盤事件


我正在編寫某種電子遊戲,玩家每回合有 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

你可以使用 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);
}