打字稿:创建KeyboardEvent并随时激活/停用它



我希望能够处理键盘事件,但也能够按照我希望在我的代码中再次停止/开始处理它们。

我一直在阅读有关KeyboardEvent的MDN Mozilla文档,以及它从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);
  }
}

一起工作后,我们提出了这个解决方案:

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'
  }
}

也许事件是" iscomposing"(布尔,如果是构图,则为true)字体:https://developer.mozilla.org/en-us/docs/web/api/keyboardevent

相关内容

  • 没有找到相关文章

最新更新