首页 > 解决方案 > 在不停止其余代码的情况下延迟 Javascript 中的操作

问题描述

试图在游戏中延迟拍摄,动作是通过点击完成的,但目前,它在按住点击的同时拍摄每一帧。

SetTimeInterval 在我的情况下不起作用,因为它只是循环函数 SetTimeout 不能正常工作,因为它在播放的第二秒和间隔之后停止该函数。尝试了睡眠功能,但它在运行时冻结了代码

//sleepcode
var sleep = function(delay) {
    var start = new Date().getTime();
    while (new Date().getTime() < start + delay);
} 
//called by:
if(self.pressingAttack){
    self.shootBullet(self.mouseAngle);
    sleep(3000);
}

我想要一个功能,它可以在点击的第二个中射击,但会延迟第二个子弹,类似于以往的所有射击游戏。

标签: javascript

解决方案


你不能按照你想要的方式做你想做的事。JavaScript 被设计为不具有“睡眠功能”。

从您所说的看来,您似乎在动画帧处理程序中进行了检查,该处理程序测试是否按下了按钮,如果按下则触发动作。为了防止此操作在接下来的三秒内触发,只需检查自上次触发该操作以来是否已经三秒:

let lastAttack = null;

// ...

if (self.pressingAttack) {
    let now = new Date();
    if (!lastAttack || now - lastAttack > 3000) {
      self.shootBullet(self.mouseAngle);
      lastAttack = now;
    }
}

推荐阅读