用代码实现游戏应用中连续按键触发必杀技的监测方法
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();
代码解释和改进说明:
SkillTrigger
类: 封装了技能触发的逻辑,使代码更清晰易维护。- 构造函数参数:
skillKey
(触发键),comboLength
(连击次数),comboTimeout
(超时时间),可以根据需要自定义。 handleKeyDown
方法: 监听键盘按下事件,核心逻辑在此处理。triggerSkill
方法: 触发技能时执行的逻辑,例如播放动画、扣除能量等。 添加了冷却时间 (1秒),防止技能被立即再次触发。resetCombo
方法: 重置连击计数和时间。skillTriggered
标志: 用于防止技能在冷却时间内被重复触发.destroy
方法: 用于移除事件监听器,防止内存泄漏,在游戏结束或场景切换时调用。- 使用示例: 创建
SkillTrigger
实例,传入相应的参数。 - 其他按键重置: 按下其他按键会重置连击,更符合游戏逻辑.
- 面向对象: 使用类的方式,更易于扩展和维护,例如可以创建多个
SkillTrigger
实例来监听不同的技能组合。
使用方法:
- 将代码复制到你的 JavaScript 文件中。
- 创建一个
SkillTrigger
实例,并传入所需的按键、连击次数和超时时间。 - 在游戏循环或其他合适的时机调用
update
方法(本例中通过事件监听实现)。
进一步改进:
- 组合键: 可以修改
handleKeyDown
方法以支持组合键,例如Shift
+A
。 - 游戏手柄支持: 可以添加对手柄按键的支持。
- 更复杂的技能触发逻辑: 可以根据游戏需求添加更复杂的触发条件,例如特定方向键 + 技能键。
这个改进后的版本更加健壮和灵活,能够更好地满足游戏开发的需求。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!