用代码实现游戏应用中连续按键触发必杀技的监测方法

class SkillTrigger {
  constructor(skillKey, comboLength, comboTimeout) {
    this.skillKey = skillKey; // 触发技能的按键
    this.comboLength = comboLength; // 连续按键次数
    this.comboTimeout = comboTimeout; // 超时时间 (毫秒)
    this.keyPressCount = 0;
    this.lastKeyPressTime = 0;
    this.skillTriggered = false; // 技能是否已触发

    this.handleKeyDown = this.handleKeyDown.bind(this);
    this.resetCombo = this.resetCombo.bind(this);

    window.addEventListener('keydown', this.handleKeyDown);
  }

  handleKeyDown(event) {
    if (this.skillTriggered) return; // 技能已触发,忽略后续按键

    if (event.key === this.skillKey) {
      const currentTime = Date.now();

      if (this.keyPressCount === 0 || currentTime - this.lastKeyPressTime <= this.comboTimeout) {
        this.keyPressCount++;
        this.lastKeyPressTime = currentTime;

        if (this.keyPressCount >= this.comboLength) {
          this.triggerSkill();
        }
      } else {
        this.resetCombo();
      }
    } else {
      this.resetCombo(); // 按下其他键,重置连击
    }
  }

  triggerSkill() {
    this.skillTriggered = true;
    console.log("必杀技触发!");
    // 执行触发技能的逻辑,例如播放动画、扣除能量等

    // 添加一个短暂的冷却时间,防止技能被立即再次触发
    setTimeout(() => {
      this.skillTriggered = false;
    }, 1000); // 例如,1秒的冷却时间

    this.resetCombo();
  }


  resetCombo() {
    this.keyPressCount = 0;
    this.lastKeyPressTime = 0;
  }

  destroy() { // 清理事件监听器
    window.removeEventListener('keydown', this.handleKeyDown);
  }
}


// 使用示例:
const skillTrigger = new SkillTrigger('a', 3, 500); // 按键 'a',连续按 3 次,超时时间 500ms


// 可选:在游戏结束或场景切换时销毁实例
// skillTrigger.destroy();


代码解释和改进说明:

  1. SkillTrigger 类: 封装了技能触发的逻辑,使代码更清晰易维护。
  2. 构造函数参数: skillKey (触发键), comboLength (连击次数), comboTimeout (超时时间),可以根据需要自定义。
  3. handleKeyDown 方法: 监听键盘按下事件,核心逻辑在此处理。
  4. triggerSkill 方法: 触发技能时执行的逻辑,例如播放动画、扣除能量等。 添加了冷却时间 (1秒),防止技能被立即再次触发。
  5. resetCombo 方法: 重置连击计数和时间。
  6. skillTriggered 标志: 用于防止技能在冷却时间内被重复触发.
  7. destroy 方法: 用于移除事件监听器,防止内存泄漏,在游戏结束或场景切换时调用。
  8. 使用示例: 创建 SkillTrigger 实例,传入相应的参数。
  9. 其他按键重置: 按下其他按键会重置连击,更符合游戏逻辑.
  10. 面向对象: 使用类的方式,更易于扩展和维护,例如可以创建多个 SkillTrigger 实例来监听不同的技能组合。

使用方法:

  1. 将代码复制到你的 JavaScript 文件中。
  2. 创建一个 SkillTrigger 实例,并传入所需的按键、连击次数和超时时间。
  3. 在游戏循环或其他合适的时机调用 update 方法(本例中通过事件监听实现)。

进一步改进:

  • 组合键: 可以修改 handleKeyDown 方法以支持组合键,例如 Shift + A
  • 游戏手柄支持: 可以添加对手柄按键的支持。
  • 更复杂的技能触发逻辑: 可以根据游戏需求添加更复杂的触发条件,例如特定方向键 + 技能键。

这个改进后的版本更加健壮和灵活,能够更好地满足游戏开发的需求。

posted @   王铁柱6  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示