Javascript setInterval";撞车“;过一会儿?

Javascript setInterval";撞车“;过一会儿?,javascript,raphael,intervals,Javascript,Raphael,Intervals,我正在创建一个“子弹地狱”风格的游戏,有多个设置间隔函数用于生成敌人、一个ups、子弹、计时器以及设置间隔来测量不同对象之间的碰撞,以便它知道该做什么(例如,承受伤害、增加生命等)。虽然代码运行得很好,但过了一段时间(我试过多次,通常在40-60秒左右运行,但有时会在5分钟后运行),它基本上“崩溃”——我的冲突不再起作用,繁殖间隔像每秒一次一样工作。我尝试过摆弄setInterval计时器,但似乎没有任何效果,整个代码相当长,所以我将其粘贴到了一个文件夹中,非常感谢您的帮助 否则,正在运行的间隔

我正在创建一个“子弹地狱”风格的游戏,有多个设置间隔函数用于生成敌人、一个ups、子弹、计时器以及设置间隔来测量不同对象之间的碰撞,以便它知道该做什么(例如,承受伤害、增加生命等)。虽然代码运行得很好,但过了一段时间(我试过多次,通常在40-60秒左右运行,但有时会在5分钟后运行),它基本上“崩溃”——我的冲突不再起作用,繁殖间隔像每秒一次一样工作。我尝试过摆弄setInterval计时器,但似乎没有任何效果,整个代码相当长,所以我将其粘贴到了一个文件夹中,非常感谢您的帮助

否则,正在运行的间隔如下所示:

let startGame = function(ev){
        bulletHellPopup.style.display = "none"
        if (isMouseUp === false && isEndlessOn === false){ //puting this in a conditional stops the spawnEnemy function from running multiple times
            isMouseUp = true;
            spawn = setInterval(spawnEnemy, 100); //manipulate this value to adjust spawn rate
            time =  setInterval(startTimer, 100)
            loadTime = Date.now();
        }; 
        if (isMouseUp === false && isEndlessOn === true){
            isMouseUp = true;
            spawn = setInterval(endlessSpawn, 150); //manipulate this value to adjust spawn rate
            time =  setInterval(startTimer, 100)
            loadTime = Date.now();
            spawnLivesVariable = setInterval(spawnLives, 10000);
            shootFunction = setInterval(spawnBullets, 75);
        }; 
    };
    let damage = function(ev){
        collision(playerCircle, bulletArray);
        //console.log(bulletArray.length)
    };

    let oneUp = function(ev){
        collisionLife(playerCircle, lifeArray);
    };

    let shooting = function(ev){
        collisionShoot(shootArray, bulletArray);
    };

    setInterval(damage, 50);
    setInterval(oneUp, 50);
    setInterval(shooting, 50);

你正在经历他们所谓的“布局混乱”。使用
setInterval()
setTimeout()
连续更改用户屏幕,会导致更改。请阅读requestAnimationFrame,它可以为您解决这个问题。可能的参考:@KevinVerstraete,谢谢你把我链接到这里!至少可以说这很有趣。不幸的是,虽然我已经用requestAnimationFrame替换了setInterval函数,但问题似乎仍然存在,尽管这比使用setInterval晚了一点。另外,不知道为什么,但cancelAnimationFrame似乎无法正常工作。尽管这确实让一切变得更加顺利,但根本问题依然存在:(我不是游戏设计师,但我知道js和浏览器的局限性。浏览器页面中的所有内容都是一个线程,因此使用的间隔和超时越多,执行堆栈就越重。因此,使用1或2个间隔/动画帧来控制这一切似乎是一个好主意。但仔细阅读Web workers,这可以让你在浏览器中使用多线程。Y您可以将时间间隔移动到那里,并通过事件将需要更改UI的事件发送到页面。我知道我只提供一些小细节,但正如我所说的,这不是我的核心业务。@KevinVerstraete嘿,别担心,非常感谢您为我指出了其他我尚未学习的有趣的事情,我非常感谢!