Typescript:随时创建 KeyboardEvent 和 activate/deactivate
Typescript: create KeyboardEvent and activate/deactivate it at anytime
我希望能够处理键盘事件,但也希望能够 stop/start 在我的代码中再次处理它们。
我一直在通读 MDN Mozilla Docs 关于 KeyboardEvent
的内容,以及它从 Event
继承的方式 我发现我可以使用一些有用的方法来实现我想要的实现如:
event.initEvent
event.preventDefault
但经过一些研究并尝试将所有东西放在一起后,我很挣扎,但最终无法找到实现它的方法。
为了证明我已经尝试弄清楚我的解决方案是如何工作的,我想向您展示我目前所拥有的:
class Game {
private gameOver: boolean = false;
private timeOfRoundMillis: number = 5 * 1000;
private keyboardEvent: KeyboardEvent;
private capturedInput: string[];
constructor() {}
public play(): void {
this.round();
}
private round(): void {
if (!this.gameOver) {
// I want to start capturing keys
keyboardEvent.initEvent();
setTimeout(() => {
// Now I want to stop capturing keys to process the input
keyboardEvent.preventDefault();
this.processPlayerInput();
this.emptyCapturedInput();
this.round();
}, this.timeOfRoundMillis);
}
}
private processPlayerInput(): void {
// do some stuff with 'capturedInput'
}
// I want to call this every time a key is pressed if
// capturing keyboard events is active
private capture(e): void {
capturedInput.push(e.keyPressed);
}
}
也许事件是 "isComposing"(布尔值,如果正在组合则为真)
字体:https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent
经过共同努力,我们得出了这个解决方案:
var keypress = require('keypress');
declare var process: any;
class Game {
private gameOver: boolean = false;
private timeOfRoundMillis: number = 5 * 1000;
private capturedInput: string[];
constructor() {
keypress(process.stdin);
process.openStdin().on('keypress', (key) => {
// I want to call this every time a key is pressed
this.capturedInput.push(key);
});
process.stdin.setRawMode(true);
}
public play(): void {
this.round();
}
private round(): void {
if (!this.gameOver) {
setTimeout(() => {
// Now I want to stop capturing keys to process the input
this.isCapturingKeys = false; // need to set it to true when you desire to start capturing again
this.processPlayerInput();
this.emptyCapturedInput();
this.round();
}, this.timeOfRoundMillis);
} else {
process.stdin.pause(); // close stdin events
}
}
private processPlayerInput(): void {
// do some stuff with 'capturedInput'
}
}
我希望能够处理键盘事件,但也希望能够 stop/start 在我的代码中再次处理它们。
我一直在通读 MDN Mozilla Docs 关于 KeyboardEvent
的内容,以及它从 Event
继承的方式 我发现我可以使用一些有用的方法来实现我想要的实现如:
event.initEvent
event.preventDefault
但经过一些研究并尝试将所有东西放在一起后,我很挣扎,但最终无法找到实现它的方法。
为了证明我已经尝试弄清楚我的解决方案是如何工作的,我想向您展示我目前所拥有的:
class Game {
private gameOver: boolean = false;
private timeOfRoundMillis: number = 5 * 1000;
private keyboardEvent: KeyboardEvent;
private capturedInput: string[];
constructor() {}
public play(): void {
this.round();
}
private round(): void {
if (!this.gameOver) {
// I want to start capturing keys
keyboardEvent.initEvent();
setTimeout(() => {
// Now I want to stop capturing keys to process the input
keyboardEvent.preventDefault();
this.processPlayerInput();
this.emptyCapturedInput();
this.round();
}, this.timeOfRoundMillis);
}
}
private processPlayerInput(): void {
// do some stuff with 'capturedInput'
}
// I want to call this every time a key is pressed if
// capturing keyboard events is active
private capture(e): void {
capturedInput.push(e.keyPressed);
}
}
也许事件是 "isComposing"(布尔值,如果正在组合则为真) 字体:https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent
经过共同努力,我们得出了这个解决方案:
var keypress = require('keypress');
declare var process: any;
class Game {
private gameOver: boolean = false;
private timeOfRoundMillis: number = 5 * 1000;
private capturedInput: string[];
constructor() {
keypress(process.stdin);
process.openStdin().on('keypress', (key) => {
// I want to call this every time a key is pressed
this.capturedInput.push(key);
});
process.stdin.setRawMode(true);
}
public play(): void {
this.round();
}
private round(): void {
if (!this.gameOver) {
setTimeout(() => {
// Now I want to stop capturing keys to process the input
this.isCapturingKeys = false; // need to set it to true when you desire to start capturing again
this.processPlayerInput();
this.emptyCapturedInput();
this.round();
}, this.timeOfRoundMillis);
} else {
process.stdin.pause(); // close stdin events
}
}
private processPlayerInput(): void {
// do some stuff with 'capturedInput'
}
}