Typescript:如何在有限的时间内捕获键盘事件
Typescript: how to capture keyboard events for a limited time
我正在编写某种视频游戏,其中玩家轮流 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
}
您可以在 N 秒后使用 setTimeout 函数取消绑定 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);
}
我正在编写某种视频游戏,其中玩家轮流 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
}
您可以在 N 秒后使用 setTimeout 函数取消绑定 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);
}