【新人求助】键盘输入事件中重复调用回调函数

我按下按键之后,函数onKeyboardDown有时候会连续调用两次,导致出错。
代码如下:

@ccclass('Test')
export class Test extends Component {
  @property
  speed = 0;

  private dir = 0;

  onLoad() {
    input.on(Input.EventType.KEY_DOWN, this.onKeyboardDown, this);
    input.on(Input.EventType.KEY_UP, this.onKeyboardUp, this);
  }

  update(deltaTime: number) {
    let pos = this.node.position;
    pos = v3(pos.x + this.speed * this.dir * deltaTime, pos.y, pos.z);
    this.node.setPosition(pos);
  }

  onDestroy() {
    input.off(Input.EventType.KEY_DOWN, this.onKeyboardDown, this);
    input.off(Input.EventType.KEY_UP, this.onKeyboardUp, this);
  }

  onKeyboardDown(event: EventKeyboard) {
    switch (event.keyCode) {
      case KeyCode.ARROW_LEFT:
        this.dir -= 1;
//  Error: this.dir == -2
        break;
      case KeyCode.ARROW_RIGHT:
        this.dir += 1;
        break;
    }
  }

  onKeyboardUp(event: EventKeyboard) {
    switch (event.keyCode) {
      case KeyCode.ARROW_LEFT:
        this.dir += 1;
        break;
      case KeyCode.ARROW_RIGHT:
        this.dir -= 1;
        break;
    }
  }
}

好像偶发会出现问题