尝试延迟游戏中的射击,该动作是通过单击来完成的,但目前,它会在按住click的同时拍摄每一帧。
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);
}
我想要一种功能,它可以击中第二秒钟,但会延迟第二发子弹,类似于以往的任何射击游戏。
答案 0 :(得分:0)
您无法按照自己的方式做自己想做的事。 设计的JavaScript 不具有“睡眠功能”。
从您所说的看来,您似乎在动画帧处理程序内进行了检查,以测试按钮是否被按下,如果触发,则触发操作。为了防止此操作在接下来的三秒钟内触发,只需检查距上一次触发该操作是否已经三秒钟:
hexa = struct.unpack('H',struct.pack('e',dec_float))[0]
hexa = hex(hexa)
hexa = hexa[2:]
答案 1 :(得分:0)
您必须对“睡眠”使用承诺。
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
要使用Promise等待,IE使用await,您只能在异步函数中执行此操作。还应该注意的是,您不希望在主游戏循环中这样做,因为代码将停止并等待...因此您的主循环需要调用攻击循环而不是等待它。
async function Attackloop() {
// some code
while (self.pressingAttack) {
self.shootBullet(self.mouseAngle);
await sleep(3000);
}
// some code.
}
答案 2 :(得分:-1)
您可以使用set timeout函数来延迟执行。
if(self.pressingAttack){
setTimeout("shootBullet", 3000);
}
function shootBullet()
{
self.shootBullet(self.mouseAngle);
}