Fe-interview: [js] 第279天 用代码实现游戏应用中连续按键触发必杀技的监测方法

Created on 19 Jan 2020  ·  1Comment  ·  Source: haizlin/fe-interview

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

作者:liuxiaole

我也要出题

假设你在开发一款游戏应用,游戏中如果玩家连续按下“上上下下左右左右BA”,则玩家控制的角色可以发出必杀技能。请用代码实现必杀技监测。

必杀技触发条件:连续按下 “上上下下左右左右BA”
必杀技冷却时间:10秒 (即10秒内无法再次触发)
按键监听:监听 window 上的按键事件即可
触发必杀技:请 console.log("触发必杀技") 示意即可

不同角色必杀技触发条件和冷却时间不同,如果需要根据角色设定动态设定必杀技监测逻辑,又该如何实现呢?

js

Most helpful comment

const skills = [
  {
    keys: ['ArrowUp', 'ArrowUp', 'ArrowDown', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'ArrowLeft', 'ArrowRight', 'b', 'a'],
    cd: 10,
    skillsCheckProgress: 0,
    skillsLastFire: 0,
  }
]

window.onkeydown = (key) => {
  for (let i = 0; i < skills.length; i++) {
    let skill = skills[i];
    if (key.key === skill.keys[skill.skillsCheckProgress]) {
      skill.skillsCheckProgress++;
    } else {
      skill.skillsCheckProgress = 0;
    }
    let now = new Date().getTime();
    if (skill.skillsCheckProgress === skill.keys.length
      && (now - skill.skillsLastFire) > (skill.cd * 1000)) {
      skills.skillsCheckProgress = 0;
      skills.skillsLastFire = now;
      console.log('fire');
    }
  }
}

>All comments

const skills = [
  {
    keys: ['ArrowUp', 'ArrowUp', 'ArrowDown', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'ArrowLeft', 'ArrowRight', 'b', 'a'],
    cd: 10,
    skillsCheckProgress: 0,
    skillsLastFire: 0,
  }
]

window.onkeydown = (key) => {
  for (let i = 0; i < skills.length; i++) {
    let skill = skills[i];
    if (key.key === skill.keys[skill.skillsCheckProgress]) {
      skill.skillsCheckProgress++;
    } else {
      skill.skillsCheckProgress = 0;
    }
    let now = new Date().getTime();
    if (skill.skillsCheckProgress === skill.keys.length
      && (now - skill.skillsLastFire) > (skill.cd * 1000)) {
      skills.skillsCheckProgress = 0;
      skills.skillsLastFire = now;
      console.log('fire');
    }
  }
}
Was this page helpful?
0 / 5 - 0 ratings