javascript - 在不停止其余代码的情况下延迟 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 被设计为不具有“睡眠功能”。
从您所说的看来,您似乎在动画帧处理程序中进行了检查,该处理程序测试是否按下了按钮,如果按下则触发动作。为了防止此操作在接下来的三秒内触发,只需检查自上次触发该操作以来是否已经三秒:
let lastAttack = null;
// ...
if (self.pressingAttack) {
let now = new Date();
if (!lastAttack || now - lastAttack > 3000) {
self.shootBullet(self.mouseAngle);
lastAttack = now;
}
}
推荐阅读
- java - 无效方法仅在放入“onDraw”时才有效
- powershell - 更少的内存然后使用的进程仍然不会关闭进程
- generics - 如何从 Kotlin 中的 KProperty1 中提取类
- excel - 我需要有一个动态报告数据来自另一个工作表。什么是正确的公式?
- python - 无法使用 Python-Flask 在 html 中设置变量值 - 值转换为编码格式
- neo4j - 内置企业版程序不可用
- javascript - 无法让 Promise 依次评估
- javascript - 如何在背景图片中添加 id
- c# - 如何在身份服务器事件处理程序(IEventSink)中获取访问令牌
- python - 如何为具有不同类型和大小的 6 个参数的函数实现多处理