为了账号安全,请及时绑定邮箱和手机立即绑定

如何从游戏循环内的数组中删除对象(setInterval)

如何从游戏循环内的数组中删除对象(setInterval)

POPMUISE 2021-11-12 16:31:50
我有一个点击事件,它检查数组中的对象是否应该被删除(isSquashed),当它为真时,我们从数组列表中删除该对象,但是当出现这种情况时,我需要跳出循环或递减i值,基本上我想跳出for循环,在拼接数组对象后用newArray列表长度再次调用gameloop我尝试了两种方式向后迭代 for 循环给出中断声明(获得非法中断声明)但它仍然没有发生在我身上所以有人可以帮我解决这个问题并让我知道我如何解决这个问题,maingameloop = function(antsArray) {  //inititialization  // antsArray[i].draw();  // antsArray[i].checkifSmashed();  //gameloop  if (this.isplaying) {    console.log(this.score);    for (let i = 0; i < antsArray.length; i++) {      let gameloop = setInterval(() => {          antsArray[i].move();          antsArray[i].update(antsArray);          if (antsArray[i].isSquashed) {            this.score++;            antsArray.splice(i, 1);            // i--;            clearInterval(gameloop);            // this.isplaying = false ;          }        },        this.FRAME_RATE,      );    }  } else {    //gameover    // this.maingameloop(antsArray);  }}从数组中删除对象时得到的 o/p 是:Uncaught TypeError: Cannot read property 'move' of undefined
查看完整描述

3 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

循环间隔或超时绝不是一个好主意


尝试这个


var cnt = antsArray.length


function ants() {

  if (cnt <= 0) {

    //gameover

    // this.maingameloop(antsArray);

    return;

  }

  if (this.isplaying) {

    console.log(this.score);

    antsArray[cnt].move();

    antsArray[cnt].update(antsArray); // ???

    if (antsArray[cnt].isSquashed) {

      this.score++;

      cnt--;

    }

    setTimeout(play, this.FRAME_RATE);

  }

}


查看完整回答
反对 回复 2021-11-12
?
撒科打诨

TA贡献1934条经验 获得超2个赞

我清除了 setInterval 然后我检查了条件并添加了一个休息时间,这不会是非法的,因为我超出了时间间隔,所以它对我有用,谢谢大家的建议


maingameloop = 函数(antsArray){


    //inititialization


    // antsArray[i].draw();

    // antsArray[i].checkifSmashed();


    //gameloop

    if (this.isplaying) {

      for (let i = 0; i< antsArray.length;  i++) {


      let gameloop = setInterval(() => {

        antsArray[i].move();

        antsArray[i].update(antsArray);


          if (antsArray[i].isSquashed) {

            this.score++;                             

            clearInterval(gameloop);           

          }


        }  

    , this.FRAME_RATE);


    if(antsArray[i].isSquashed ){

      antsArray.splice(i, 1);

     break;

    }  

    }

  }else {

      //gameover

      // this.maingameloop(antsArray);

    }

  }



查看完整回答
反对 回复 2021-11-12
?
四季花海

TA贡献1811条经验 获得超5个赞

避免在循环内使用 setInterval ,因为它需要异步回调才能在同步循环内运行,而同步循环将始终显示这些类型的错误。


查看完整回答
反对 回复 2021-11-12
  • 3 回答
  • 0 关注
  • 165 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信