javascript - 在绘制对象期间添加延迟功能
问题描述
我将 setInterval 放入代码中,但这显然将所有激光延迟了 1 秒。
我希望它按以下顺序工作:
- 在开始时,laser1 和laser2 被发射。
- 1 秒休息并发射另一组激光等。
此外,如果有人可以教我如何在论坛上将所有代码块移动四个空格,那将是惊人的,因为我在谷歌找到的方法都没有解决这个荒谬的问题。
代码快捷方式:
let laser1;
let lasers1 = [];
let laser2;
let lasers2 = [];
function createLaser() {
laser1 = new Laser(bossOne.x, bossOne.y + bossOne.sizeY, 10, 50, 5);
lasers1.push(laser1);
laser2 = new Laser(bossOne.x + bossOne.sizeX - 10, bossOne.y +
bossOne.sizeY, 10, 50, 5);
lasers2.push(laser2);
}
function draw() {
requestAnimationFrame(draw);
setInterval(createLaser, 1000);
for (i = 0; i < lasers1.length; i++) {
lasers1[i].show();
lasers1[i].move();
}
for (i = 0; i < lasers2.length; i++) {
lasers2[i].show();
lasers2[i].move();
}
}
requestAnimationFrame(draw);
如果需要完整代码的远程主机:
https
://stacho163.000webhostapp.com/
激光是红色的
我认为我应该使用布尔值,但无法将其设置在那里。
有一个与密钥激活类似的主题,但是我与基于布尔值提出解决方案的人失去了联系(因为它效果不佳),所以我首先选择了最简单的部分,而不涉及密钥。
任何提示表示赞赏:)
解决方案
尝试更改setInterval
为setTimeout
,因为它已经在递归循环 - 只需为其添加延迟即可。还将呼叫移动requestAnimationFrame
到底部draw
,而不是顶部:
function draw()
setTimeout(createLasers, 1000);
//Loops
requestAnimationFrame(draw);
}
推荐阅读
- r - 如何在 r 中解析这个 xml 文档?
- .net-core - 工作单元 - 所有存储库都需要是属性吗?
- c - C - 赋值从没有强制转换的指针生成整数
- c# - UWP c#从类访问MainPage文本块
- angular - 如何在不产生多个调用的情况下以角度视图访问方法?
- c# - 发布 Web api 时,Dotnet publish 不创建文件夹
- batch-file - 在 SVN 预提交挂钩中提取多行提交日志
- c# - 如何在 asp.net 核心中返回自定义 http 标头?
- java - 为什么我的结果是 1436189223 ?请帮我解释这个结果
- python - 在运行时重写配置文件